我正在尝试将文本写入文件。
如果我使用文件=“ C:\ Temp \ Dir \ Test.txt”,那么我没问题
如果我在路径=“ 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());
答案 0 :(得分:0)
\\
或由/
代替。"Папка"
替换"\u041F\u0430\u043F\u043A\u0430"
来进行测试。必须创建目录。
Path path = Paths.get("C:\\Temp\\Папка на русском\\Test.txt");
Files.createDirectories(path.getParent());
Files.write(path,
"C:\\Temp\\Папка на русском\\Test.txt".getBytes(StandardCharsets.UTF_8));
writeStringToFile( "C:\\Temp\\Папка на русском\\Test.txt",
new File( "C:\\Temp\\Папка на русском\\Test2.txt"));
答案 1 :(得分:-1)
无效的文件路径。使用“ C:\ Temp \Папканарусском\ Test.txt”。
请阅读:https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
最好编写一个跨平台的路径(对于* nix和Windows操作系统)