it-swarm.cn

无法生成文件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)`

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

20
Shervin Asgari

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

20
duffymo

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

尝试这样的事情:

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

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

Permissions app

试试吧

f.mkdirs() then createNewFile()

2
Jigar Joshi

您可能想要使用Apache Commons IOFileUtils.openOutputStream(File) 方法。当出现问题时它会有很好的异常消息,并且还会创建必要的父目录。如果一切正常,那么你直接得到你的OutputStream - 非常整洁。

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

2
Fabian Barney

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

1
Chinthaka Dinadasa

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

问题是中间目录不存在。你想先调用f.mkdirs()

1
Sean Owen

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

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