我在使用 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()));
非常感谢。
最佳答案
注意:我是一个相当新的用户,还不能直接发表评论(仅限到目前为止我的问题和答案),所以我将其发布为答案。
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? ) 中提到了它以字节为单位完成的确切方式。它们的基础知识是相同的,但其他方面却有所不同,比如汉字。建议沿着这条线寻找解决方案(我必须去上课!)。我可能完全错了,但这可能是一个很好的起点。祝你好运。
关于java.io.IOException : No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44155961/