Java Apache CLI,可执行jar,classLoader().getResource()
我的目标是将apachecli与可执行jar文件一起使用,以读取文本文件,执行字符串操作,然后写入CSV。您可以在终端中执行以下工具:Java Apache CLI,可执行jar,classLoader().getResource(),java,maven,jar,apache-commons-cli,Java,Maven,Jar,Apache Commons Cli,我的目标是将apachecli与可执行jar文件一起使用,以读取文本文件,执行字符串操作,然后写入CSV。您可以在终端中执行以下工具: $ java -jar my-tool-with-dependencies.jar -i input.txt -o output.csv 我已经为此功能编写了测试,这些测试正在通过。测试输入文本文件位于src/test/resources/中。以下测试通过: @Test public void testWordockerWriteCsvFileContents
$ java -jar my-tool-with-dependencies.jar -i input.txt -o output.csv
我已经为此功能编写了测试,这些测试正在通过。测试输入文本文件位于src/test/resources/
中。以下测试通过:
@Test
public void testWordockerWriteCsvFileContents() {
// Make sure the csv file contains contents
Wordocker w = new Wordocker();
String intext = "/textformat/example_format.txt";
String outcsv = "/tmp/foo.csv";
w.writeCsvFile(intext, outcsv);
try {
Reader in = new FileReader(outcsv);
Iterable<CSVRecord> records = CSVFormat.DEFAULT.parse(in);
for (CSVRecord record : records) {
assertTrue(record.toString().length() > 0);
}
} catch(FileNotFoundException e){
assertTrue(false);
} catch(IOException e) {
assertTrue(false);
}
File file = new File(outcsv);
if (file.exists()) {
file.delete();
}
}
这让我相信whereParseDoc.class.getClassLoader().getResource(文件名)存在问题代码>正在查找该文件。我知道有人问过一些相关的问题。有关问题如下:
这些问题中似乎没有一个是关于如何在ApacheCli中使用可执行jar的。我认为最基本的问题是,URL-resourceURL=ParseDoc.class.getClassLoader().getResource(fileName)无法找到命令行参数给出的文件路径代码>
请让我知道你的想法。谢谢您的时间。我在通过评论讨论后也将此作为答案发布:
Classloader.getResource()
仅获取打包为Jar文件一部分或位于类路径文件夹中的文件
对于读取普通文件,您可以使用与第一个示例类似的内容,即FileReader
或FileInputStream
,或者只需传递java.io.file
,这取决于您尝试使用的库支持的内容。为什么不在测试中使用FileReader?GetResource只查找打包在jar文件中的文件,这就是您要做的吗?当然不是,听起来FileReader应该是您要做的事情。
// Get file from resources folder
URL resourceURL = ParseDoc.class.getClassLoader().getResource(fileName);
if (resourceURL == null) {
throw new FileNotFoundException(fileName + " not found");
}
file = new File(resourceURL.getFile());