我正在尝试读取jar文件中的文件夹,当它不是jar格式时它工作正常,但是当我jar它时,它会返回nullpointerexpcetion,因为它无法找到文件或目录
所以,这是我的方法......
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);
}
}
}
基本上这是在jar里面的java文件中 并且jar有这个目录,其中包含我需要阅读的文件
file.java位于主文件夹中 主文件夹/类/补丁/模型 但是类文件从classes文件夹中读取,所以我就像这样 ./patches/models/+i+.dat
任何想法为什么它没有正确阅读它以及如何修复它以便它以jar格式工作,如果不是两种格式? 任何帮助表示赞赏。
答案 0 :(得分:1)
JAR中的文件被视为资源。
您需要使用
InputStream fileStream = getClass().getResourceAsStream("dir1/dir2/file1")
然后使用InputStream API从中读取
答案 1 :(得分: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和我添加的副本。