2011-09-30 96 views
5

我有一个Java应用程序,我试图加载将被包含在jar中的文本文件。getResource与父目录引用

当我做getClass().getResource("https://stackoverflow.com/a/b/c/")时,它能够创建该路径的URL,我可以打印出来,一切都很好。

但是,如果我尝试getClass().getResource(/a/b/../"),那么我会返回一个null URL。

它似乎不喜欢在路径中的..。任何人看到我做错了什么?如果这会有帮助,我可以发布更多的代码。

+0

这个问题回答了我要去搜索的问题。我有一个getResource(“../ icons/SomeIcon.png”)从jar加载时返回null,但从文件系统加载时正确返回资源。在两种情况下,Java都不会解决这个问题。 – Trejkaz

回答

5

FilenameUtils类中的normalize() methods(其中有四个)可以帮助您。它在Apache Commons IO library

final String name = "https://stackoverflow.com/a/b/../"; 
final String normalizedName = FilenameUtils.normalize(name, true); // "https://stackoverflow.com/a/" 
getClass().getResource(normalizedName); 
+1

真棒这工作。我使用normalize(name,true)方法在Windows系统上保留unix样式斜线(/)。谢谢! –

+0

@Trejkaz:感谢您的编辑建议!不幸的是它被别人拒绝了,我必须手动编辑它。为了弥补你丢失的+2分,我已经检查了你的帖子,并提高了其中的一些。 – palacsint

2

您在getResource()中指定的路径不是文件系统路径,并且不能像路径由File对象(及其类似路径)解析一样正则解析。我能否认为您正在尝试阅读相对于其他路径的资源?

+0

雅所以我从代码中的不同位置获取部分路径,所以当我将字符串合并为“..”的时候。我没有试图突破getResource(“/”)获得的基本目录。我试图读取的资源是相对于另一个路径,但仍然在jar和我可以阅读的东西,如果我手动删除路径中的“..”。也许这就是我必须要做的。 –