我已经建立了一个项目。项目必须读取配置文件和数据文件(两个文本文件)。文件应由用户上传,它们可以有不同的名称。一切正常。
我从项目中创建了runnable jar并尝试从cmd运行它,如下所示:
java -jar walksat.jar "params_3.txt", "Test3ArielWCNF-log.wcnf"
。
我可以在jar中打印参数,它看到它们没问题,但我得到:
java.io.FileNotFoundException: params_3.txt, (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at mla.project.main.WalkSAT.setGlobalParams(WalkSAT.java:347)
at mla.project.main.WalkSAT.main(WalkSAT.java:60)
我得到的第二个文件的错误相同。
但是,如果我将硬编码文件的名称(而不是args [0]和args [1]),jar就可以读取它们。
jar文件和其他两个文件位于同一个文件夹中。
我在这里缺少什么?
更新 args[0]
最后有,
,我没有看到。
答案 0 :(得分:2)
File jarFile = new File(".");
这将为您提供jar所在的当前目录的引用。您现在可以使用jarfile.listFiles()从中读取文件。 假设您应该将配置,数据文件和jar文件保存在同一文件夹中
我创建了一个小型主类,您可以将其导出为可运行的jar并运行它。它将列出目录中的所有文件。
import java.io.File;
公共类读者{
public static void main(String[] args) {
File jarFile = new File(".");
if(jarFile.isDirectory())
{
File[] allFiles = jarFile.listFiles();
System.out.println("Printing File names");
for (File file : allFiles) {
System.out.println(file.getName());
//code for reading the file goes here..............
}
}
}
}