2012-05-10 72 views
1

我想用MAVEN構建一個非常小的程序,它從文件中讀取,但我明顯地做錯了,因爲它給了我FileNotFoundException。從Maven的文件中讀取

這是我的目錄結構看起來像:

my-app 
     src 
     main| 
      | 
      |--java| 
      |  | 
      |  Main.java 
      | 
      |--resources| 
         | 
         res.txt 

的res.txt包含一些字符串,我想從Main.java

閱讀
... 
File file = new File("res.txt"); 
FileReader fr= new FileReader(file); 
BufferedReader br = new BufferedReader(fr); 
... 

我編譯: C:\ my-app mvn包

它創建目標下的jar。當我偷看罐內,我看到它包含的兩個Main.class和res.text 彼此相鄰(在同一目錄下)

不過,當我嘗試運行它:
java命令target/my-app-1.0-SNAPSHOT.jar Main

我給我的FileNotFoundException,Main.class莫名其妙地看不到res.txt文件。爲什麼?我應該在哪裏放res.txt?我還應該配置什麼?

任何幫助將大大appriciated。

+0

這是我的pom.xml文件: –

回答

0

我假設.txt文件被複制到目標文件夾和部分jar文件?

在這種情況下,使用資源加載器從類路徑中檢索它,而不是從文件系統中檢索它。

請參閱read file in classpath瞭解如何加載文件的一些示例。

+0

當我窺視到罐子裏我看到這一點: ---- META- INF(目錄) ---- Main.class ---- res.text –

+0

多數民衆贊成在完美。你應該能夠從類路徑中讀取文件。 – wemu

+0

是這樣的? BufferedReader br = new BufferedReader(new InputStreamReader(this.getClass()。getResourceAsStream(「res.txt」))); –

0

您可以嘗試與

File file = new File(this.getClass().getResource("/res.txt").getFile()); 

甚至

File file = new File(this.getClass().getResource("/res.txt").toURI()); 
+0

他們都沒有工作:-( –

+0

無論如何,因爲我有更多的機會玩它我發現問題是更多的類路徑相關的maven相關如果我解壓縮jar和運行類從適當的地方比它能找到res.text但是,如果我嘗試運行它以外的jar像這樣:java -cp target/my-app-1.0-SNAPSHOT.jar主要比它沒有找到文本文件。這個問題必須與我相關的classpath有關 –