我正在尝试在文件系统上创建一个文件,但我一直得到这个例外:
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)`
我对路径有写权限,但是没有创建文件。
答案 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)
小心权限,可能你没有其中的一些。你可以在设置中看到它 - >应用 - >申请名称 - >权限 - >如果没有,则激活。
答案 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());