2013-01-21 103 views
2

我已經看過很多其他類似於我的問題,但不幸的是他們的答案迄今爲止都沒有奏效。閱讀罐子裏的txt文件

我有一個Java項目,看起來像這樣:

 
MyProject/ 
    src/ 
     abc/ 
      MyClass.java 
     xyz/ 
      file1.txt 
      file2.txt 
      ...  

從本質上講,我試圖在MyClass.java閱讀所有的TXT文件的上面。這是目前我在做什麼:

File dir = new File("src/xyz/"); 
for (File child : dir.listFiles()) { 
    ... 
} 

直到我把一切都變成JAR格式的,在這一點dir.listFiles()回報null和上面不再工作這工作得很好。無論如何,即使將它們打包到JAR中,我仍然可以讀取這些txt文件嗎?另外,如果它有任何區別,我使用Eclipse。

回答

8

您可以通過類加載器訪問類路徑中的文件。

getClass().getResourceAsStream("/xyz/file1.txt"); 

然後,你會像往常一樣使用InputStream。請注意,我使用絕對路徑,但相對於當前的包也適用。

由於Java 6,還可以列出一個包下所有的資源很容易:

Enumeration urls = getClass().getClassLoader().getResources("xyz"); 
urls.nextElement().openStream(); 
+0

這要求在/ JAR中包含/xyz/file1.txt。這可能需要修改構建屬性或等效項。 – oconnor0

+1

很好的答案。快樂1K。 :) –

+0

謝謝:)還添加了一種方法來獲取包下的所有資源。 –

1

反正我還甚至可以閱讀這些TXT文件的時候都打包成一個JAR?

鑑於你的意思是'不知道他們的名字提前'沒有。

OTOH您可以將資源包含在Jar中的已知位置並列出可能的文本。從根目錄或類路徑的路徑,每行一個將工作良好。使用類似於以下內容獲取資源的URL:

URL url = this.getClass().getResource("/path/to/the.resource");