Java Apache CLI,可执行jar,classLoader().getResource()

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

我的目标是将apachecli与可执行jar文件一起使用,以读取文本文件,执行字符串操作,然后写入CSV。您可以在终端中执行以下工具:

$ 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();
}

}
这让我相信where
ParseDoc.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());