2013-04-23 39 views
6

我有一個看似奇怪的問題,使用Java 7的Files類。 我想確保我的目錄和存在的文件之前,我開始寫,以避免FileNotFoundException,並根據JavadocscreateDirectory檢查「文件的存在和目錄的創建,如果它不存在」Files.createDirectory():FileAlreadyExistsException

因此,如果它首先檢查,爲什麼當目錄已經存在時,下面的代碼有問題?

private void writeFile() throws IOException { 
    // Make sure parent directory and file are ready 
    File file = "mydirectory/my.file"; 
    File parent = file.getParentFile(); 
    if (parent != null) 
     Files.createDirectory(parent.toPath()); // Why do I get FileAlreadyExistsException? =[ 
    Files.createFile(file.toPath()); 

    // Do some file writing stuff! 
} 

我知道我可以只給一個「如果沒有文件存在則創建」的東西,但我認爲這種方法的主旨就是要照顧一切,對我!

異常數據:

java.nio.file.FileAlreadyExistsException: mydirectory 
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source) 
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) 
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) 
at sun.nio.fs.WindowsFileSystemProvider.createDirectory(Unknown Source) 
at java.nio.file.Files.createDirectory(Unknown Source) 
+0

你可以發佈異常嗎?並告訴我它拋出哪一行? – Dima 2013-04-23 21:05:45

回答

15

documentation

public static Path createDirectories(Path dir, FileAttribute<?>... attrs) throws IOException 

「先建立所有不存在的父目錄創建一個目錄。不同的是createDirectory方法,如果由於目錄已經存在而無法創建目錄,則不會引發異常。「

也許你可以使用那一個

+0

是的,這工作 - 但現在'createFile'引發異常;有沒有類似的東西呢?沒有'createFiles'這樣的方法。 – CJxD 2013-04-23 21:23:05

+0

擰這個,我只是想用file.exists() – CJxD 2013-04-23 21:30:37

0

的Java 7 documentation已經提到,你會得到一個FileAlreadyExistsException。那麼問題似乎是什麼?

+0

所以它沒有注意到。但是,爲什麼當它從描述中推斷出,如果目錄已經存在,它應該快樂地繼續下去? – CJxD 2013-04-23 21:17:33

+0

不,沒有推論。拋出異常意味着它不會繼續。可能你不在乎,但別人可能會。 – 2013-04-23 21:25:26

+0

我誤解了文檔 - 我認爲它不會在意。 – CJxD 2013-04-23 21:26:40

1

Files.createDirectory實際上創建目錄 - >「創建一個新目錄....應該使用createDirectories方法來首先創建所有不存在的父目錄。」

如果你想確保該文件存在,只需要使用file.exists()方法

+0

這正是我想要做的,創建所有不存在的目錄。 – CJxD 2013-04-23 21:14:14

相關問題