【发布时间】:2012-07-29 06:46:45
【问题描述】:
我正在尝试使用 getResourceAsStream() 访问类路径上的资源:
InputStream is = getClass().getResourceAsStream(path);
如果路径是这样的:/net/original/xsdtestxml.xml,那么我没有问题。
但是,在某些情况下,我必须使用“转到父级”符号../ 来访问某些文件。我正在根据某些参数手动构建路径。
最终结果是这样的:
/net/original/../original/xsdtestxml.xml
这在 Eclipse 中运行良好。当我在 Eclipse 之外运行它时它工作正常(从包含 .class 的程序目标文件夹中的命令行)。但是,一旦我将它们打包到 jar 文件中,它就会抛出 NullPointerException。
getResourceAsStream() 导出到 jar 后是否有可能支持这种格式?如果没有,是否有 Java/ Utility 类可以在没有 ../ 符号的情况下获取文件路径?比如将/net/original/../original/xsdtestxml.xml转换成/net/original/xsdtestxml.xml格式?
一种可能的解决方案:
在java.net 包中有一个URI 类可以满足我的需要。您只需使用构造函数创建 URI 对象或使用静态 create(String) 方法。然后调用normalize()方法,可以使用toString()或getPath()方法获取字符串路径。
这是对我有用的代码示例:
String finalPath = URI.create(inputPath).normalize().getPath();
inputPath 是可以包含 ../ 文字的路径。
这完美地将/net/original/../original/xsdtestxml.xml 转换为/net/original/xsdtestxml.xml,这正是我从类路径上的jar 访问文件所需要的。
【问题讨论】:
标签: java resources jar classpath