我正在尝试使用以下方式访问类路径上的资源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 访问文件。