2013-03-18 332 views
1

我創建了一個程序來顯示目錄中存在的所有文件和子目錄,該目錄名稱作爲cmd中命令行的參數傳遞。
第一個如果條件(if(f.isDirectory()))檢查給定的參數是否目錄工作正常。
然後我使用File.list()方法是dir_content = f.list()將所有文件名列表存儲在String dir_content數組中的目錄中。
然後在for循環中,每次爲存儲在字符串數組dir_content中的每個文件名創建一個新的文件對象,即文件f1 =新文件(dir_content [i])然後檢查是否存在該文件使用exists()方法即if(f1.exists())
現在的問題是,f1.exists儘管它們存在於給定目錄中,但它仍然爲許多文件返回false。它顯示幾個文件,而且不顯示子目錄。
下面是我的程序的代碼: -即使文件存在,file.exists()方法也會返回false

import java.io.File; 
class FileDemo1 
{ 
public static void main(String[] a) 
{ 
    File f = new File(a[0]); 
    String[] dir_content; 

    if(f.isDirectory()) 
    { 
    System.out.print(f.getName()+" is a directory containing "); 
    dir_content = f.list(); 

    for(int i=0;i<dir_content.length;i++) 
    { 
     File f1 = new File(dir_content[i]); 
     if(f1.exists()) 
     { 
     System.out.print("\n\t: "+f1.getName()); 
     System.out.print(" "+f1.isFile()); 
     System.out.print(" "+f1.isDirectory()); 
     } 
    } 

    } 
} 
} 

有人請告訴我的問題及其解決方案背後的原因。
在此先感謝。

+0

'dir_content = f.list();'如果應用程序。處理'File'實例,不要使用'String'實例。請參閱['File.listFiles()'](http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles%28%29)。 – 2013-03-18 12:38:52

回答

2

您的邏輯正確,但File.list不符合您的想法。它returs文件名,而不是其完整路徑的列表,所以你需要做的是這樣的:

File f1 = new File(f,dir_content[i]); 

正確地創建的文件路徑(您想給定目錄內的文件「FILE1.TXT」) 。

+0

參見['File.listFiles()'](http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles%28%29)。 – 2013-03-18 12:39:43

+0

是的,它可以工作,謝謝。 – user2181750 2013-03-18 12:53:35

0

dir_content [i]只有目錄名,所以當你構建File對象時,它只有Directory的名稱而不是整個路徑,所以這就是爲什麼你會得到一個false。

所以,如果你做這樣的事應該讓你真正:

File f1 = new File(f.getPath() + dir_content[i]); ///f being a directory 
相關問題