我正在尝试从类路径/ 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());
Run Code Online (Sandbox Code Playgroud)
现在,当我还在Eclipse中时,访问资源的两种方式都可以完美地工作并产生这样的输出:
templStream: java.io.BufferedInputStream@746d1683
templFile: true
Run Code Online (Sandbox Code Playgroud)
但是在将代码导出到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)
Run Code Online (Sandbox Code Playgroud)
所以我一直没有成功地寻找一种方法来直接访问资源作为文件,或者使用InputStream并将该InputStream转换为文件.
最糟糕的情况是回退解决方案是将InputStream复制到文件系统上的文件,然后打开该文件,但我希望这不是必要的.
我刚开始使用"Java资源文件",我有几个问题......
这就是我所做的.创建一个新的资源文件,因为我使用NetBeans,我可以在它看起来像这样导航器中的文件标签下看到它的位置:
这是我如何尝试访问它,但当我调试它回来null.
private void getPaths()//todo
{
try
{
InputStream is = getClass().getResourceAsStream("/resources/directories.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
br.close();
isr.close();
is.close();
}
catch(Exception e)
{
}
}
Run Code Online (Sandbox Code Playgroud)