3

「tééé ê.mp3」など、ファイル名に特殊文字を含むファイルを書き込もうとしていますが、ファイル名は常に「?」のままです。文字「é」の代わりに、いくつかの方法を試しましたが、解決策が見つかりませんでした:

String musicName = new String("tééé ê.mp3".getBytes(), "UTF-8");
OutputStreamWriter bw = new OutputStreamWriter(new FileOutputStream(FILE_PATH+"musics/"+musicName), "UTF-8");
bw.write(data);
bw.close();

私もこの方法を試しました。

OutputStreamWriter bw = new OutputStreamWriter(new FileOutputStream(URLDecoder.decode(FILE_PATH+"musics/tééé ê.mp3", "UTF-8")), "UTF-8");
bw.write(data);
bw.close();
4

1 に答える 1

1

で試してくださいFiles

final Path target = Paths.get("tééé ê.mp3");

try (
    final OutputStream out = Files.newOutputStream(target, StandardOpenOption.CREATE_NEW);
) {
    // write
}

これが、ファイルシステムがそのようなファイル名をサポートしていないという問題である場合は、InvalidPathException;が表示されます。とは異なりFile、新しい API は、読み取り不能になる可能性のあるファイル名の作成を拒否します。

これが実際にパスを作成できない場合は、エスケープする方法を見つけて、ある程度エスケープする必要があります。たぶん、ある種のデータベースか何かに別の名前を書きます。

チェックさInvalidPathExceptionれていないことに注意してください。したがって、この例外を明示的にキャッチする必要があります。また、JVM で使用されている現在の文字コードがファイル名の生成に適していない場合にも、この例外が発生する可能性があることに注意してください。

于 2015-02-12T11:57:24.327 に答える