7

Java アプリにバンドルされているリソース ファイルが多数あります。これらのファイルには、ü や æ などの国際文字を含むファイル名があります。getClass().getResource() を使用してこれらのファイルをロードしたいのですが、これらの特定のファイル名に対して getResource メソッドが常に null を返すため、明らかにこれはサポートされていません。

そのため、国際文字の URL エンコーディングを使用して実験しましたが、http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4968789で述べられているように、これもサポートされていません。

だから、私の質問は次のとおりです。国際文字を含む名前を持つリソースをロードする推奨される方法は何ですか? たとえば、Sjælland.txt という名前のファイルの UTF-8 コンテンツを読み込む必要があります。

4

2 に答える 2

3

あるかどうかはわかりませんが(かなりのハックであるため、bestおそらく候補です)、これは有能なメカニズムのようです。jar を直接読み取ることで、worst使用する必要がなくなります。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ところ、エントリが正常に取得されました。

于 2012-10-22T16:18:47.870 に答える
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のようです。使っているものかもしれません。

于 2012-10-23T07:12:12.877 に答える