我遇到了使用java保存/创建文件的问题。
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method) ~[na:1.7.0_79]
我的环境正在使用Linux但在Windows上安装(我尝试存储文件的地方)。 每当我尝试创建文件名有中文字符时,它就会命中。
这可能是因为Linux和Windows之间的编码差异吗?
当我尝试在类似的操作系统中运行和存储(在Linux中运行应用程序,在Linux中存储,对于Windows运行相同的东西)时,它运行顺畅。
非常感谢任何帮助。
我用来创建文件的代码
File imgPath = new File(fullpath.toString());
if (!imgPath.exists()){
FileUtils.forceMkdir(imgPath);
imgPath.setWritable(true, false);
}
fullpath.append(File.separator).append(fileName);
outputStream = new FileOutputStream(new File(fullpath.toString()));
非常感谢。
答案 0 :(得分:1)
注意:我是一位相当新的用户,并且无法直接评论(目前为止仅针对我的问题和答案),所以我将此作为答案发布。
Windows使用UTF-16,而Linux使用UTF-8; (考虑到你还没有安装任何额外的东西来改变任何东西)UTF-8和UTF-16支持相同的字符范围。但是,我没记错,它与内存有关(UTF-8从8位开始,UTF-16从16开始?)。无论如何,它们的存储/读取方式略有不同。然后,InputStreamReader将指定编码中的外部表示中的字符转换为内部表示。在这个stackoverflow帖子(Difference between UTF-8 and UTF-16?)中提到了它以字节为单位完成的确切方式。它们对于基础知识来说是相同的,但对于其他人来说则不同,例如汉字。建议在那条线上寻找解决方案(我必须上课!)。我可能完全错了,但这可能是一个很好的起点。祝你好运。