文件名中的特殊字符 java
Special characters in filename java
我正在尝试编写一个文件名中包含特殊字符的文件,例如 "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();
试试 Files
:
final Path target = Paths.get("tééé ê.mp3");
try (
final OutputStream out = Files.newOutputStream(target, StandardOpenOption.CREATE_NEW);
) {
// write
}
现在,如果这是您的文件系统不支持此类文件名的问题,您将得到一个 InvalidPathException
;与 File
不同,新的 API 拒绝创建最终可能无法读取的文件名。
如果这样确实造不出来那道,那你就得想办法逃脱一些;也许将替代名称写入某种数据库或其他东西。
请注意 InvalidPathException
未选中;因此,您必须显式捕获此异常。另请注意,如果 JVM 使用的当前字符编码不适合生成文件名,您可能会遇到此异常。
我正在尝试编写一个文件名中包含特殊字符的文件,例如 "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();
试试 Files
:
final Path target = Paths.get("tééé ê.mp3");
try (
final OutputStream out = Files.newOutputStream(target, StandardOpenOption.CREATE_NEW);
) {
// write
}
现在,如果这是您的文件系统不支持此类文件名的问题,您将得到一个 InvalidPathException
;与 File
不同,新的 API 拒绝创建最终可能无法读取的文件名。
如果这样确实造不出来那道,那你就得想办法逃脱一些;也许将替代名称写入某种数据库或其他东西。
请注意 InvalidPathException
未选中;因此,您必须显式捕获此异常。另请注意,如果 JVM 使用的当前字符编码不适合生成文件名,您可能会遇到此异常。