2013-04-02 124 views
0

我已经建立了一个项目。项目必须读取配置文件和数据文件(两个文本文件)。文件应该由用户上传,他们可以有不同的名称。一切正常。jar从外部读取文件

我从项目中创建了runnable jar,并试图像这样从cmd运行它: java -jar walksat.jar "params_3.txt", "Test3ArielWCNF-log.wcnf"。 我可以在罐子中打印参数,它看到他们确定,但我得到: 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

当您打印'ARGS [0]'和'ARGS [1]',他们怎么显示为? –

+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.............. 
      } 
     } 

    } 

}