getResource()无法读取jar内部目录的内容

时间:2014-08-12 07:05:14

标签: java jar

我刚刚解决了这个问题,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的内容

enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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