我正在尝试从类路径/JAR 文件作为 File 对象访问资源。我知道这是使用 InputStream 对象的首选方法,但我使用的是需要 File 对象的外部库(WorldEdit)。
这是我的代码:
InputStream templStream = "".getClass().getResourceAsStream("/res/template.prom");
System.out.println("templateStream: " + templStream.toString());
File templFile = new File("".getClass().getResource("/res/template.prom").toURI());
System.out.println("templateFile: " + templFile.canRead());
现在,当我还在 eclipse 中时,两种访问资源的方式都可以完美运行并产生以下输出:
templStream: java.io.BufferedInputStream@746d1683
templFile: true
但是将代码导出到 JAR 存档后,代码失败:
templStream: sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@47aa261b
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(File.java:392)
at SMCToPROM.main(SMCToPROM.java:101)
因此,我一直在寻找一种方法,要么直接将资源作为文件访问,要么采用使用 InputStream 并将 InputStream 转换为文件的方法,但没有成功。
最坏的后备解决方案是将 InputStream 复制到文件系统上的文件中,然后打开该文件,但我希望这不是必需的。