2011-09-19 73 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()); 
相關問題