带有args的Java程序,用于在Talend中实现

我被要求编写一个Java程序,它将TSV文件作为inpunt并生成一个不同的TSV文件(在其中有很多变化,在输入和args上变化很大)作为输出。

这是一个非常大的程序(花了3天时间编写代码,但我不是很好),它最终处理来自15k行的输入,产生1500K行输出。

编写代码时,我不知道以后我必须在Talend中实现它,所以它是一个普通的Java程序需要4个args:输入文件的名称,输出文件的名称,int,int

我设法将我的Main作为例程与所需的额外包(个人和openCSV)。

我的问题是: 是否有可能在Talend中实现它而不改变它? 我不能告诉Talend,这里是输入文件,那些是args? 我昨天才听说Talend。

如果您感兴趣,这是主要的,但我相信我的问题非常通用。

public static void main(String[] args) throws ArgsExceptions { // Boolean set to true while everything is good Boolean everythingOk = true; String inputFile = null; // Name of the entry file to be transposed. String outputFile = null; // Name of the output file. int serieNb = 1 ; // Number of columns before the actual values in the input file. Can be columns describing the product as well as empty columns before the values. int linesToCopy = 0; // Number of lines composing the header of the file (those lines will be copy/pasted in the output) /* * Handling the arguments first. */ try { switch (args.length) { case 0: throw new EmptyArgsException(); case 1: inputFile = args[0]; String[] parts = inputFile.split("\\."); // If no outPutFile name is given, will add "Transposed" to the inputFile Name outputFile = parts[0] + "Transposed." + parts[1]; break; case 2: inputFile = args[0]; outputFile = args[1]; break; case 3: inputFile = args[0]; outputFile = args[1]; serieNb = Integer.parseInt(args[2]); break; case 4: inputFile = args[0]; outputFile = args[1]; serieNb = Integer.parseInt(args[2]); linesToCopy = Integer.parseInt(args[3]); break; default: inputFile = args[0]; outputFile = args[1]; serieNb = Integer.parseInt(args[2]); linesToCopy = Integer.parseInt(args[3]); throw new OutOfBordersArgsException(); } } catch (ArgsExceptions a) { a.notOk(everythingOk); } catch (NumberFormatException n) { System.out.println("Arguments 3 & 4 should be numbers." + " Number 3 is the Number of columns before the actual values in the input file. \n" + "(Can be columns describing the product as well as empty columns before the values. (1 by default)) \n" + "Number 4 is the number of lines to copy/pasta. (0 by default) \n" + "Please try again."); everythingOk = false; } // Creating an InputFile and an OutputFile InputFile ex1 = new InputFile(inputFile, linesToCopy); OutputFile ex2 = new OutputFile(outputFile); if (everythingOk) { try ( FileReader fr = new FileReader(inputFile); CSVReader reader = new CSVReader(fr, '\t', '\'', 0); FileWriter fw = new FileWriter(outputFile); CSVWriter writer = new CSVWriter(fw, '\t', CSVWriter.NO_QUOTE_CHARACTER)) { ex1.setReader(reader); ex2.setWriter(writer); // Reading the header of the file ex1.readHead(); // Writing the header of the file (copy/pasta) ex2.write(ex1.getHeadFile()); // Handling the line containing the columns names HeadOfValuesHandler handler = new HeadOfValuesHandler(ex1.readLine(), serieNb); ex2.writeLine(handler.createOutputHOV()); // Each lien will be read and written (in multiple lines) one after the other. String[] row; CommonLine cl1; // If the period is monthly if (handler.isMonthly()) { while (!ex1.isAllDone()) { row = ex1.readLine(); if (!ex1.isAllDone()) { cl1 = new CommonLine(row, handler.getYears(), handler.getMonths(), serieNb); ex2.write(cl1.exportOutputLines()); } } } // If the period is yearly else { while (!ex1.isAllDone()) { row = ex1.readLine(); if (!ex1.isAllDone()) { cl1 = new CommonLine(row, handler.getYears(), serieNb); ex2.write(cl1.exportOutputLines()); } } } } catch (FileNotFoundException f) { System.out.println(inputFile + " can't be found. Cancelling..."); } catch (IOException e) { System.out.println("Unknown exception raised."); e.printStackTrace(); } } } 

感谢您阅读这篇文章!

如果需要保持原样,可以将代码打包为任何可运行的格式,然后通过Talend tSystem组件或tLibraryLoad组件调用它(如果它是Jar文件)。

,不能在Talend中使用代码而不更改它。

但是,如果定义明确,则可以重新创建工作流程。

编辑

正如54l3d指出的那样,可以添加外部库并调用它们,如果只能进行少量的额外工作,这似乎是一个很好的解决方案。 如果环境需要它,例如如果有很多工作需要维护,那么仍然最好使用“本地”Talend。