2011-09-19 43 views
18

我想创建文件系统中的文件,但我不断收到此异常:不能使文件产生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)` 

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

+0

可否请您加入到第一行之后这条线,向我们展示了输出固定我的问题内容:System.out.println(F); –

+0

你确定目录'.foo/bar'确实存在? – trojanfoe

+1

** /。foo/bar **中的点是什么? – denolk

回答

16

打印完整的文件名,或在调试器步。当我被这样的错误困惑时,这意味着我的假设和期望与现实不符。确保你可以看到什么是路径;它会帮助你找出你出错的地方。

+1

该死的,你在哪里吧。我在路径名中输入了一个错字 –

+0

无法想象为什么这是在OP被接受并被确认为评论中的正确修复之后的5.5年之后被投票的原因。感觉斗气。匿名时容易做到。 – duffymo

+0

它是容易的,但是谁也会降低声誉,所以它不会“自由”下降。 –

33

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

尝试是这样的:

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

该目录确实存在 –

+0

@Shervin,然后调试是您**必须执行的下一步。 :-) –

+1

不错的一个,帮我 – emvidi

2

f.mkdirs()然后createNewFile()

+0

该目录确实存在 –

+2

您可以尝试['File.separator'](http://download.oracle.com/javase/6/docs/api/java/io/File.html#separator)而不是'/' –

1

File.isFile()false尝试,如果文件/目录不存在,所以你不能用它来测试你是否尝试创建一个目录。但这不是第一个问题。

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

2

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

如果您只是想touch该文件,然后使用FileUtils.touch(File)来代替。

7

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

Permissions app

0

我用休息,容易得到时,同样的问题。搜索后,我认为这个错误发生时,没有地方保持临时文件。因此,在tomcat中,您可以创建tomcat-root/temp文件夹。

0

我这段代码的Linux文件系统上

if (!file.exists()) 
    Files.createFile(file.toPath()); 
相关问题