2010-11-15 4 views
1

Je voulais un programme qui pourrait lister tout le contenu disponible dans un répertoire. J'ai trouvé un beau code dans java2's.com, http://www.java2s.com/Code/Java/File-Input-Output/ListingtheDirectoryContents.htmJe ne comprends pas le programme

Et voici le code,

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")); 
    } 
} 

Ce que je ne comprends pas la n variable dans la première boucle for. Si elle n'est définie nulle part, alors pourquoi le programme ne montre aucune erreur?

+1

Ceci est en fait un mauvais exemple. Ce n'est pas threadsafe. Je refactoriser 'indentLevel' comme variable locale et le passer comme un autre argument. – BalusC

+0

@BalusC: d'accord, c'est un morceau de code horrible. –

Répondre

5
int i, n; 

déclarerait deux entrées.

Dans le code

int i = 0, n = files.length; 

et les déclare initialise.

+0

+1 Ces points-virgules sont faciles à oublier quand vous voyez une virgule en Java pour les boucles. – Zoot

+0

C'est un beau morceau de code obscurci. (brr, ne fais pas tout ce qui est permis par le JLS). Belle explication, +1! –

4

Il est déclaré ici, en tant que int. La virgule sépare les déclarations de variables multiples.

+2

Il pourrait également être facilement supprimé en faveur de juste 'i

0

n est défini dans la boucle for de la même manière que i.

int x, y; Définir deux variables x et y à la fois comme ints. la virgule dans le pour avec des missions semble plus complexe.

+0

Oh, c'était idiot .... merci les gars. – Maverick

Questions connexes