【问题标题】:Read files in a directory in a jar file在jar文件中读取目录中的文件
【发布时间】:2012-04-09 10:47:57
【问题描述】:

我正在尝试读取 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 在主文件夹中 主文件夹/类/补丁/模型 但是类文件从类文件夹中读取,所以我有这样的 ./patches/models/+i+.dat

关于为什么它不能正确读取它以及如何修复它以便它可以在 jar 格式(如果不是两种格式)中工作的任何想法? 任何帮助表示赞赏。

【问题讨论】:

标签: java jar directory


【解决方案1】:

JAR 中的文件被视为资源。

你需要使用

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

然后使用 InputStream API 从中读取

【讨论】:

  • 我如何在这种方法中使用它?
  • 因此您可以使用类加载器来获取该“包”中的资源列表。 classloader.getResources() 应该给你列表。有关用法的示例,请参见 sn-ps.dzone.com/posts/show/4831
【解决方案2】:

您不应该以这种方式使用文件:路径是绝对的或相对于您正在执行 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 和我添加的副本。

【讨论】:

  • 好的,现在我有了这个 InputStream fileStream = getClass().getResourceAsStream("."+ slash +"Patches" + slash+"Models"+slash); File[] fileArray = fileStream.listFiles();然而 listFiles()'s 不是一个有效的资源方法,它对资源来说是什么?
猜你喜欢
  • 2012-04-09
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多