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