2012-03-25 152 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