无法使文件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());