2010-11-15 76 views
1

我想要一個可以列出目錄中所有可用內容的程序。我發現java2's.com一個漂亮的代碼, http://www.java2s.com/Code/Java/File-Input-Output/ListingtheDirectoryContents.htm我不明白該程序

這裏是代碼,

import java.io.File; 
import java.util.Arrays; 

public class Dir { 

    static int indentLevel = -1; 

    static void listPath(File path) { 
    File files[]; 
    indentLevel++; 

    files = path.listFiles(); 

    Arrays.sort(files); 
    for (int i = 0, n = files.length; i < n; i++) { 
     for (int indent = 0; indent < indentLevel; indent++) { 
     System.out.print(" "); 
     } 
     System.out.println(files[i].toString()); 
     if (files[i].isDirectory()) { 
     listPath(files[i]); 
     } 
    } 
    indentLevel--; 
    } 

    public static void main(String args[]) { 
    listPath(new File(".\\code")); 
    } 
} 

我不明白的是在第一循環for變量n。如果它沒有在任何地方定義,那麼爲什麼程序沒有顯示任何錯誤?

+1

這實際上是一個不好的例子。這不是線程安全的。我將'indentLevel'重構爲局部變量並將其作爲另一個參數傳遞。 – BalusC 2010-11-15 14:27:13

+0

@BalusC:贊同,這是一段糟糕的代碼。 – 2010-11-15 14:27:58

回答

5
int i, n; 

將聲明兩個整數。

在代碼

int i = 0, n = files.length; 

聲明並初始化它們。

+0

+1當你在Java for循環中看到一個逗號時,那些討厭的分號很容易忘記。 – Zoot 2010-11-15 14:30:35

+0

這是一段美麗的混淆代碼。 (brr,不要做JLS允許的一切)。很好的解釋,+1! – 2010-11-15 14:50:56

4

它在那裏宣佈,作爲int。逗號分隔多個變量聲明。

+2

它也可以很容易地刪除,只是'我 2010-11-15 14:26:22

0

n是以與i相同的方式在for循環中定義的。

int x,y; 將定義兩個變量x和y都爲整數。在賦值中的逗號看起來更復雜。

+0

哦,那真是太可愛了....謝謝你們。 – Maverick 2010-11-15 14:29:44