2011-05-16 52 views
17

這裏是我的項目的結構。Maven exec:java:如何打開和讀取資源目錄中的文件?

proj 
    ---src 
    ----main 
     ----java 
      ----Main.java 
     ----resources 
      ----res.txt 

我在Eclipse中使用m2eclipse插件。 在Main.java,我有

File f = new File("res.txt"); System.out.println(f.getAbsolutePath()); 

當我運行mvn高管:Java中,路徑得到打印出來就是 「... \凸出\​​ res.txt」。我怎樣才能讓它在「... \ proj \ target \ classes」目錄下查找資源文件?

編輯:

謝謝你的答案我原來的問題。我有一個後續問題:

所以基本上我想要做的是讓主類讀取「res.txt」,然後生成一個新的「newres.txt」資源目錄,以便我可以稍後將這個新的「newres.txt」封裝到包文件的jar文件中。目前我將這個exec:java加載到prepare-package階段。我應該如何在資源目錄中創建這個「newres.txt」,而不使用硬編碼的絕對路徑或根據Maven的目錄結構?

回答

19

我想我會回答我自己的問題,Thread.currentThread().getContextClassLoader().getResourceAsStream() 最適合我,特別是當項目產生另一個web項目的jar依賴項。

+0

你是最棒的!謝謝 – Angelo 2015-12-10 14:34:46

1

從eclipse運行時,res.txt是在啓動eclipse的文件夾的/ reader中創建的。因此輸出。

如果您想讓代碼查看您的類路徑中存在的特定文件夾中的文件,那麼您應該嘗試使用getResourceAsStream()方法。

或者,您可以指定文件的絕對路徑。

12

嘗試

InputStream IS = Main.class.getResourceAsStream("res.txt"); 

訪問的res.txt內容。注意文本文件的編碼(注意默認值)。例如,如果您的maven項目設置爲UTF-8,請確保res.txt也以UTF-8編碼,否則,您將在運行時收到有趣的錯誤。

+0

更多內容在博客中我最近創建:http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata- in.html – JVerstry 2012-07-27 13:26:39

+0

有關何時使用前導'/'作爲資源路徑的信息,請參見http://www.javaworld.com/javaqa/2003-08/01-qa-0808-property.html?page=2。 – leo 2013-07-08 14:29:42

13

圖我會添加到答案。

您還可以使用:

InputStream file = ClassLoader.getSystemResourceAsStream("res.txt"); 
+1

這解決了我的問題!非常感謝您花時間寫這個解決方案! – Wulf 2013-08-27 21:27:35

+0

很高興幫助! – Cuga 2013-08-28 15:28:47

相關問題