6

私は次のコードを持っています:

public static void main( String[] args ) {
    System.out.println(Locale.getDefault());
    File f = new File("/Users/johngoering/Documents");
    File[] fs = f.listFiles();
    for (File ff : fs) {
        System.out.println(ff.getName());
        System.out.println(ff.exists());
    }
}

ドキュメントフォルダに「öß.pdf」というファイルがあります。Java6での出力は次のとおりです。

 en_US
 (...)
 öß.pdf
 true
 (...)

しかし、Java7での出力は次のとおりです。

 en_US
 (...)
 o����.pdf
 false
 (...)

特に、!!によってfile.exists返さfalseれたファイルの戻り値に注意してください。listFiles何が得られますか?これを修正する方法はありますか?これはかなりJava7のバグのようです...

4

1 に答える 1

9

Oracle の助けを借りて、環境変数がEclipse 内 (および JNLP またはその他の場所から開始する場合) にLC_CTYPE設定されていないという回避策を発見しました。UTF-8OS X端末はデフォルトで「ロケール環境変数を設定する」ため、これはコードが端末で機能した理由を説明しています(オプションをオフにすると、端末でも上記と同じ問題が発生します)。

ランチャーでこの環境変数を設定すると、問題が回避されました。

Java 6 はこの変数がなくても機能したため、これは Java 7 のバグだと考えています。

于 2012-09-20T10:05:47.310 に答える