【发布时间】:2020-02-05 16:15:15
【问题描述】:
我正在尝试将文本写入文件。
如果我使用 file = "C:\Temp\Dir\Test.txt",那么我没有问题
如果我在 path = "C:\Temp\Папка на русском\Test.txt" 中使用带有西里尔字母的文件,那么我有异常
注意。在代码运行之前不会创建目录
public Boolean writeStringToFile(String content, File file) {
status = false;
try (FileOutputStream fos = new FileOutputStream(file, false);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter fileWriter = new BufferedWriter(osw)) {
fileWriter.write(content);
status = true;
} catch (FileNotFoundException e) {
logger.error("File {}/{} can not be created.", file.getPath(), file.getName(), e);
}
return status;
}
用于测试:
writeStringToFile("writeStringToFile is ok. Кодировка UTF-8",
new File(Files.temporaryFolderPath() + "Папка на русском" + File.separator + "Test.txt"))
assertTrue(file.exists());
【问题讨论】:
-
这是预期行为,只是不要在文件名或路径中使用西里尔字母
-
请发帖minimal reproducible example(例如“C:\Temp...”不是有效的java字符串)
-
@Vault23 真的吗?基于什么?对我来说工作正常(使用“C:\\tmp\\Папка на русском\\A1.txt”并且已经创建了目录)
-
@Vault23 也适用于我。 Windows 10 上的 JDK 13,我还通过 Java 代码创建了目录。
标签: java filenotfoundexception fileoutputstream cyrillic