无法使文件java.io.IOException:没有这样的文件或目录
我试图在文件系统上创建一个文件,但我一直得到这个例外:
java.io.IOException: No such file or directory
我有一个现有的目录,我正在尝试将文件写入该目录。
// I have also tried this below, but get same error // new File(System.getProperty("user.home") + "/.foo/bar/" + fileName); File f = new File(System.getProperty("user.home") + "/.foo/bar/", fileName); if (f.exists() && !f.canWrite()) throw new IOException("Kan ikke skrive til filsystemet " + f.getAbsolutePath()); if (!f.isFile()) { f.createNewFile(); // Exception here } else { f.setLastModified(System.currentTimeMillis()); }
获得例外:
java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:883)`
我对路径有写权限,但是没有创建文件。
打印完整文件名或在调试器中单步执行。 当我对这样的错误感到困惑时,这意味着我的假设和期望与现实不符。 确保你能看到路径是什么; 它会帮助你弄清楚你哪里出错了。
如果目录../.foo/bar/
不存在,则无法在其中创建文件,因此请确保首先创建目录。
尝试这样的事情:
File f = new File("somedirname1/somedirname2/somefilename"); if (!f.getParentFile().exists()) f.getParentFile().mkdirs(); if (!f.exists()) f.createNewFile();
小心权限,可能你没有其中的一些。 你可以在设置中看到它 – > apps – >应用程序的名称 – >权限 – >如果没有则活动。
试试吧
f.mkdirs()
然后createNewFile()
您可能希望使用Apache Commons IO
的FileUtils.openOutputStream(File)方法。 当出现问题时它会有很好的exception消息,并且还会创建必要的父目录。 如果一切正常,那么你直接得到你的OutputStream – 非常整洁。
如果您只想touch
该文件,请改用FileUtils.touch(File)
。
如果文件/目录不存在,则File.isFile()
为false
,因此您无法使用它来测试您是否尝试创建目录。 但这不是第一个问题。
问题是中间目录不存在。 你想先调用f.mkdirs()
。
使用rest-easy时我遇到了同样的问题。 搜索后我发现当没有地方保存临时文件时发生了这个错误。 所以在tomcat中你可以创建tomcat-root / temp文件夹。
我通过linux文件系统上的代码解决了我的问题
if (!file.exists()) Files.createFile(file.toPath());