我的Java应用程序捆绑了很多资源文件。这些文件的文件名包含国际字符,如ü或æ。我想使用getClass()。getResource()加载这些文件,但显然不支持这种文件,因为对于这些特定的文件名,getResource方法总是返回null。
这让我尝试使用国际字符的网址编码,但http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4968789所述也不支持此功能。
所以,我的问题是:加载名称中包含国际字符的资源的推荐方法是什么?例如,我需要加载名为Sjælland.txt
的文件的UTF-8内容答案 0 :(得分:3)
不确定是否有best
(它可能是worst
的候选者,因为它非常黑客)但这似乎是一种有能力的机制。它通过直接读取jar来回避使用getResource
的需要。
public class NavelGazing {
public static void main(String[] args) throws Throwable {
// Do a little navel gazing.
java.net.URL codeBase = NavelGazing.class.getProtectionDomain().getCodeSource().getLocation();
// Must be a jar.
if (codeBase.getPath().endsWith(".jar")) {
// Open it.
java.util.jar.JarInputStream jin = new java.util.jar.JarInputStream(codeBase.openStream());
// Walk the entries.
ZipEntry entry;
while ((entry = jin.getNextEntry()) != null ) {
System.out.println("Entry: "+entry.getName());
}
}
}
}
我添加了一个名为Sjælland.txt
的文件,这确实成功获得了该条目。
答案 1 :(得分:0)
我不确定我是否理解正确,但如果我尝试
URL url = Test.class.getResource("/Sjælland.txt");
Object o = url.getContent();
然后o
是sun.net.www.content.text.PlainTextInputStream
。
我在Windows计算机上使用JDK 1.6。我有(默认?)System.property sun.jnu.encoding设置为Cp1252。所以这一切似乎都很好。您发布的错误似乎是JDK 1.4。它可能就是你正在使用的东西。