无法使文件java.io.IOException:没有这样的文件或目录

时间:2011-09-19 09:44:39

标签: java file 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)`

我对路径有写权限,但是没有创建文件。

8 个答案:

答案 0 :(得分:37)

如果目录../.foo/bar/不存在,则无法在那里创建文件,因此请确保先创建目录。

尝试这样的事情:

File f = new File("somedirname1/somedirname2/somefilename");
if (!f.getParentFile().exists())
    f.getParentFile().mkdirs();
if (!f.exists())
    f.createNewFile();

答案 1 :(得分:20)

打印完整文件名或在调试器中单步执行。当我对这样的错误感到困惑时,这意味着我的假设和期望与现实不符。确保您可以查看路径是什么;它会帮助你弄清楚你哪里出错了。

答案 2 :(得分:9)

小心权限,可能你没有其中的一些。你可以在设置中看到它 - >应用 - >申请名称 - >权限 - >如果没有,则激活。

Permissions app

答案 3 :(得分:2)

尝试

f.mkdirs()然后createNewFile()

答案 4 :(得分:2)

您可能希望使用Apache Commons IO的{​​{3}}方法。当出现问题时它会有很好的异常消息,并且还会创建必要的父目录。如果一切正常,那么你直接得到你的OutputStream - 非常整洁。

如果您只想touch该文件,请改用FileUtils.touch(File)

答案 5 :(得分:1)

如果文件/目录不存在,则

File.isFile()false,因此您无法使用它来测试您是否尝试创建目录。但这不是第一个问题。

问题是中间目录不存在。您想先拨打f.mkdirs()

答案 6 :(得分:1)

使用rest-easy时我遇到了同样的问题。搜索后我发现当没有保留临时文件的地方时发生了这个错误。所以在tomcat中你可以创建 tomcat-root / temp 文件夹。

答案 7 :(得分:0)

我通过linux文件系统上的代码解决了我的问题

if (!file.exists())
    Files.createFile(file.toPath());