2012-08-15 163 views
1

解壓縮文件時出現問題,我得到「打開失敗:ENOTDIR(不是目錄)」錯誤。調試後,我發現問題出在這個功能:
後,我確定當前的ZipEntry是一個目錄,我調用這個函數與它的路徑:mkdirs創建文件而不是創建文件夾[JAVA]

private void dirChecker(String dir) { 
     File FiledirChecker = new File(PATH + dir); // PATH+dir = /mnt/sdcard/Pictures/Hafs 

     if (!FiledirChecker.isDirectory()) 
      FiledirChecker.mkdirs(); 
    } 

該功能後已經結束了,我瀏覽到的圖片目錄,哈夫斯心不是一個目錄,而不是它是一個名爲「Hafs」的0字節文件。

這是怎麼發生的?

我應該指出,對於其他目錄(除了「Hafs」),mkdirs通常會創建文件夾!但只適用於這個目錄(Hafs)mkdirs不會創建一個目錄而是一個文件!

+0

你檢查了[這篇文章](http://stackoverflow.com/questions/4543559/file-mkdirs-method-not-working-in-android-java)? – assylias 2012-08-15 11:45:20

+0

@assylias是的,我已經有了這個許可。 – Omar 2012-08-15 11:47:30

+0

在調試器下運行,或添加打印語句,並查明您是否確信File(「Hafs」)。mkdirs()實際上正在調用(可能不是)。同樣,將檢查添加到文件解壓縮部分該代碼確保它不會被意外解壓縮爲一個文件(它可能是)。 – 2012-08-15 11:52:56

回答

7

這是因爲在代碼中的其他地方,已經創建了一個空文件。

或者當您的代碼無法創建目錄時,該文件是最後一次運行時剩下的文件。

0

除非我想念你的文件已經在其他地方創建了。
據我可以在你的代碼
1看)你檢查文件是不是一個目錄
2)如果1)是真的,你嘗試創建完整的目錄結構,並具有相同的名稱爲文件目錄可能已經存在。

+0

這是一個標準成語。一個'File'對象代表一條可能不存在的路徑。如果它不是一個目錄,那就創建它。確實如果文件存在但不是目錄,那麼這將嘗試(並且失敗)來創建目錄。 – 2012-08-15 12:03:21

+0

但是,正確的方法是檢查'File.exists()',而不是'File.isDirectory()' – 2012-08-15 12:17:34

相關問題