使用ClassLoader.getResourceAsStream(...)从可执行JAR文件本身读取文件对我来说是一个众所周知的概念,但我如何使用Java NIO做同样的事情?
目标是具有如下功能:
static String readFullyFromJar(String filename) {
final Path path = Paths.get(Main.class.getResource(fileName).toURI());
final byte[] bytes = Files.readAllBytes(path);
return new String(bytes, CHARSET_ASCII);
}
虽然这在IDE中运行良好,但我得到了
java.nio.file.FileSystemNotFoundException
at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171))
当我尝试使用真正的JAR时,即使目标文件位于正确的位置。
答案 0 :(得分:8)
事实证明我上面的代码实际上是正确的,问题出在Java本身。
根据这个Bug ID,Java没有正确使用ZipFileSystemProvider。假设在Java 8中修复。(我的实际问题在此duplicate report中描述)