2013-04-02 38 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.............. 
      } 
     } 

    } 

}