2012-03-25 77 views
1

我正在嘗試讀取jar文件中的文件夾,它不能以jar格式正常工作,但是當我將它jar時,它會返回nullpointerexpcetion,因爲它無法找到文件也不是目錄在jar文件中的目錄中讀取文件

所以,這裏是我有方法....

public void preloadModelsTwoOLD() { 
    String slash = System.getProperty("file.separator"); 
    File file = new File("."+ slash +"Patches" + slash+"Models"+slash); 
    File[] fileArray = file.listFiles(); 
    for(int y = 0; y < fileArray.length; y++) { 
     String s = fileArray[y].getName(); 
     if (s != "") { 
     byte[] buffer = readFile("."+ slash +"Patches" + slash+"Models"+slash+""+s); 
     Model.method460(buffer, Integer.parseInt(getFileNameWithoutExtension(s))); 
     //System.out.println("Read model: " + s); 
     } 
    } 
} 

基本上這是在罐子裏面 一個java文件和罐子有這個目錄有文件,我需要它讀取

file.java在主文件夾中 主文件夾/班/補丁/型號 但類文件讀取的類文件夾,所以我必須像這樣 ./patches/models/+i+.dat

任何想法,爲什麼它不能正確讀取它以及如何解決它,所以它會工作在jar格式,如果不是兩種格式? 任何幫助表示讚賞。

+0

可能的重複[如何列出JAR文件中的文件?](http://stackoverflow.com/questions/1429172/how-do-i-list-the-files-inside-a-jar-文件) – Snicolas 2012-03-25 20:34:49

回答

1

JAR中的文件被視爲資源。

您需要使用

InputStream fileStream = getClass().getResourceAsStream("dir1/dir2/file1") 

,然後使用InputStream的API來讀取它

+0

雖然我如何在這種方法中使用它? – Travs 2012-03-25 20:31:54

+0

因此,您可以使用類加載器來獲取該「包」中的資源列表。 classloader.getResources()應該給你列表。有關示例,請參閱snippets.dzone.com/posts/show/4831 – 2012-03-25 20:36:04

1

你不應該使用一個文件是這樣的:道路是絕對的或相對於你的目錄從中執行java。

喜歡使用

URL url = getClass().getResource("<path relative to the dir containing the .class file of invoking class>"); 
File file = new File(url.toURI()); 

你也有this resource,我添加了副本。

+0

好吧,所以現在我有這個 \t \t InputStream fileStream = getClass()。getResourceAsStream(「。」+ slash +「Patches」+ slash +「Models」 +斜線); \t \t File [] fileArray = fileStream.listFiles();然而,listFiles()對於資源來說不是一個有效的方法,它對於資源會是什麼? – Travs 2012-03-25 20:23:13

+0

對不起,我更新了我的答案 – Snicolas 2012-03-25 20:31:07