Java的getClass()的最佳国际替代品getResource()

我有很多资源文件与我的Java应用程序捆绑在一起。 这些文件具有包含国际字符(如ü或æ)的文件名。 我想使用getClass()。getResource()加载这些文件,但显然这不被支持,因为对于这些特定的文件名,getResource方法总是返回null。

这让我尝试使用国际字符的URL编码,但不支持这种方式,正如http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4968789所述。

所以,我的问题是:加载一个名称包含国际字符的资源的推荐方式是什么? 例如,我需要加载名为Sjælland.txt的文件的UTF-8内容


不知道是否有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的文件,并且成功获取了条目。


我不确定我是否正确理解你,但是如果我尝试

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。 这可能是你正在使用的。

链接地址: http://www.djcxy.com/p/11321.html

上一篇: Best international alternative to Java's getClass().getResource()

下一篇: azure blob storage logging / analytics gui tool?