2010-03-31 148 views
6

這裏是我的結構:讀取XML文件

  • COM/myCompany中/ ValueReader.class
  • COM/myCompany中/資源/ values.xml

我可以讀文件在我的Eclipse項目中,但是當我將它導出到.jar時,它永遠找不到values.xml。我試過使用ValueReader.class.getResource()和ValueReader.class.getResourceAsStream(),但它不起作用。

這裏有什麼問題? 如何獲取文件對象到我的values.xml?

B.

+0

可能的重複http://stackoverflow.com/questions/2504272/shipping-java-code-with-data-baked-into-the-jar – Kris 2010-03-31 12:46:03

回答

8

你不能得到一個File對象(因爲它不再是一個文件,一旦它在該.jar),但你應該通過getResourceAsStream(path);,其中path是能夠得到它作爲一個流完成路徑到您的班級。

例如

/com/mycompany/resources/values.xml 
+0

我試過了,它沒有工作。 你的方法是正確的。 我使用了getResourceAsStream(path),但不是path = com/mycompany/resources/values.xml,我使用了path = resources/values.xml並且它正在工作。 還是謝謝! – 2010-03-31 12:32:45

+3

它沒有工作,因爲你沒有把前導斜槓,這意味着類路徑的根。沒有它,路徑是相對的。 – Bozho 2010-03-31 12:58:51

+0

啊真的。 謝謝。我永遠不會忘記這件事! – 2010-03-31 13:07:41

-1

您可以提取罐,然後使用帶你想要的東西,在同一類路徑:

ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new 
FileInputStream(zipfile.getCanonicalFile()))); 
0

這將工作...

Thread.currentThread().getContextClassLoader().getResource("com/mycompany/resources/values.xml") 
2

你不能獲取文件的File,因爲它位於jar文件中。但你可以得到一個輸入流:

InputStream in = ValueReader.class.getResourceAsStream("resources/values.xml"); 

getResourceAsStreamgetResource類的包轉換爲文件路徑,然後在參數添加。這將爲文件路徑/com/mycompany/resources/values.xml提供一個流。