2011-07-14 47 views
2

在我的java程序中,我複製一個文件並刪除新文件。isDirectory()對文件返回true

在我的方法removeFile()我檢查它是否是一個目錄:

String fileName = "G:/1310628353186Examples.csv"; 
File f = new File(fileName); 
if (f.isDirectory()) { 
    System.out.println("'" + fileName + "' is a directory"); 
    String[] files = f.list(); 
    if (files != null && files.length > 0) 
     throw new IllegalArgumentException("Delete: directory not empty: " + fileName); 
} 

有時候我"'G:/1310628353186Examples.csv' is a directory",有時候我不知道。

當我調試的代碼和f.isDirectory()true我檢查什麼是f.isDirectory,調試器說,這是false

我在Windows 7 Professional上運行Eclipse SDK 3.4.0和JDK 1.6。

+0

什麼是'fileName'?使用'System.out.println(「'」+ f +「'是一個目錄」);'檢查'f'中的內容! –

+0

你說'f.isDirectory()'被評估爲true,但調試器說它是錯誤的?這不可能;) – hage

+0

我知道:D 我開始調試...它跳轉到isDirectory()的代碼...但是,如果我檢查isDirectory()與手錶它說...假f.list()爲空。 – Skyline

回答

1

這似乎是由Windows引起的問題。 Linux沒有這個問題。

8

您檢查是否f是一個目錄,但您打印fileName。所以也許你只是檢查/打印錯誤的變量?除非你的問題只是一個錯字。

+0

好抓!我盯着那個代碼塊好3分鐘,什麼都沒有了:) – Jon7

+0

我忘了第一行。對不起:/ – Skyline

+0

然後你應該按照Carlos的提示並打印'f'而不是'fileName'(及其一些屬性,如'getPath()'或'getAbsolutePath()'或'getName()'。 – hage

2

嘗試增加一個檢查,以查看文件是否存在,isDirectory()也將在情況下返回false該文件不存在:

if (f.exists() && f.isDirectory()) { 
+0

它沒有幫助:( – Skyline

1

你有try/catch塊來sorround,然後嘗試。

+0

起初,我只用 如果(files.length> 0) ...所以我有時會得到一個空指針異常 帶。如果(files!= null && files.length> 0) 沒有更多異常被拋出。 – Skyline

2

如果該文件是隱藏的,像文件我的音樂鏈接(生成Windows的快捷方式文件,它不是一個真正的快捷鍵),然後將測試作爲isdirectory但它不會起作用像目錄;你不能得到目錄的清單。用戶生成的快捷方式就像文件一樣。

5/31/13: 在最近的更新中,'文檔'中的'我的音樂'鏈接不再測試爲is_hidden。但是,我爲'我的音樂'拍攝的文件對象的旋律確實會返回NULL,可以對其進行測試。

1

我在OSX上遇到同樣的問題。我創建了一個常規文件,並且isDirectory()函數返回trueisFile()返回false。 (在任何地方都找不到任何證據表明這種行爲可能來自API)。

我解決了它在OSX的方法是手動從文件中讀取的屬性,但不能使用BasicFileAttributes要麼 - 它也爲一些原因返回trueisDirectory()falseisRegularFile()

Works的OSX:

PosixFileAttributes attr = Files.readAttributes(f.toPath(), PosixFileAttributes.class); 

System.out.println("File "+f.getName()+ 
        ": isDirectory="+(attr.isDirectory() ? "true" : "false")+ 
        ", isRegularFile="+(attr.isRegularFile() ? "true" : "false"));