java - 文件名java中的特殊字符

标签 java file file-writing

我正在尝试编写一个文件名中包含特殊字符的文件,例如“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();

最佳答案

尝试使用文件:

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

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

现在,如果这是您的文件系统不支持此类文件名的问题,您将得到一个InvalidPathException;与 File 不同,新 API 拒绝创建最终可能无法读取的文件名。

如果在这种情况下您确实无法创建路径,那么您将不得不找到一种逃避和取消逃避的方法;可能会为某种数据库或其他东西写一个备用名称。

请注意 InvalidPathException 未选中;因此,您必须显式捕获此异常。另请注意,如果 JVM 使用的当前字符编码不适合生成文件名,您可能会遇到此异常。

关于java - 文件名java中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28476663/

相关文章:

java - 按位运算检查字符串是否唯一

Java 流的误解......一些澄清?

python - 如何制作 csv 文件的列表

java - 在java中写入.java文件并运行脚本

java - 有人可以解释为什么 forEach 循环中分配的对象在退出 forEach 循环时变为 null 吗?

java - 使用 Comparable 按 2 个字段比较两个对象 ASC 和 DESC

c - 如何从 txt 文件中读取制表符分隔的字符串并将它们放入变量中?

java - 追踪文件句柄

Java - 替换目录中文件的内容

ios - 当 NSDictionary 添加到数组中时,它会替换之前的字典