【问题标题】:getResource() unable to read contents of a directory inside jargetResource() 无法读取 jar 内目录的内容
【发布时间】:2014-10-05 03:49:02
【问题描述】:

我刚遇到这个问题,jar 中的主类无法读取文件夹的内容。 该类包含

String path = "flowers/FL8-4_zpsd8919dcc.jpg";
    try {
        File file = new File(TestResources.class.getClassLoader()
                                .getResource(path).getPath());
        System.out.println(file.exists());
    } catch (Exception e) {
        e.printStackTrace();
    }

这里 sysout 返回false

但是当我尝试这样的事情时,它会起作用

    String path = "flowers/FL8-4_zpsd8919dcc.jpg";
    FileOutputStream out = null;
    InputStream is = null;
    try {
        is = TestResources.class.getClassLoader().getResourceAsStream(path);
        byte bytes[] = new byte[is.available()];
        is.read(bytes);
        out = new FileOutputStream("abc.jpg");
        out.write(bytes);
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

getResourceAsStream() 可以读取 jar 中文件夹的路径,但getResource() 无法读取,

为什么会这样,这两种方法对jar里面的内容的读取机制有什么区别。 简单jar的内容

【问题讨论】:

  • 你能用/flowers/FL8-4_zpsd8919dcc.jpg试试吗?
  • @sp00m 仍然是空指针
  • java.io.File 用于引用文件系统上的人工制品。单个 JAR 条目对文件系统不可见。
  • 有没有办法读取 jar 内文件夹的文件并从中创建一个数组

标签: java jar


【解决方案1】:

getResource()getResourceAsStream() 都可以在 jar 中找到资源,它们使用相同的机制来定位资源。

但是,当您从表示 jar 中的条目的 URL 构造 File 时,File.exists() 将返回 falseFile 不能用于检查 jar/zip 中的文件是否存在。

您只能使用位于本地文件系统(或附加到本地文件系统)上的File.exists

【讨论】:

  • 那么假设我需要jar中的文件夹中的文件如何在不使用JarFile类的情况下获取它。
  • “得到它”是什么意思?将其内容读入字节数组?或者获取读取其内容的InputStream
  • 好吧,我需要 jar 中那个文件夹的文件,并用它创建文件数组
  • File 不能描述 jar 条目,你不应该使用它。而是使用URLs 可以,您可以通过URL.openStream() 获取它们的内容,这对于文件和jar/zip 条目都适用。
  • 这里的场景是我需要文件夹中的文件,以便我可以将它们用于其他一些我不能使用 inputstream 的任务,所以任何方式都可以做到
【解决方案2】:

您需要使用 an absolute path 来获得您期望的行为,例如/flowers/FL8-4_zpsd8919dcc.jpg,正如 sp00m 建议的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2019-09-23
    • 2018-03-07
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多