【发布时间】:2012-05-23 05:29:24
【问题描述】:
我正在尝试从类路径/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 复制到文件系统上的一个文件,然后打开该文件,但我希望这不是必需的。
【问题讨论】:
-
@assylias:这个网站上有很多与这个问题相关的问题,但我找到的所有答案基本上都说“只使用 InputStream”。对我来说,这不是一个选择,这就是为什么我的问题是,除了我所说的 wort-case 方法之外,是否有任何方法可以将其作为文件访问。
标签: java file resources inputstream