2013-03-12 6 views
10

Meine Frage ist: Wenn diese beiden Funktionen etwas anderes haben? Ich meine, ich weiß, dass sie etwas anderes zurückgeben, aber ist es möglich, dass sich die Anzahl der Elemente in einem anderen unterscheidet als im zweiten? Ich werde versuchen, es zu erklären. Ich habe TreeModel für eine meiner Klassen implementiert, die versucht, auf JTree basierende Dateien auf dem PC anzuzeigen. Also hier ist der Teil davon:File.list() vs File.listFiles()

public Object getChild(Object parent, int index) { 
     File[] children = ((File) parent).listFiles(); 
     if(children == null || index < 0 || index >= children.length) { 
      return null; 
     } 

     File result = new MyFile(children[index]); 
     return result; 
} 

public int getChildCount(Object parent) { 
     //--- 
     //String[] children = ((File)parent).list(); 
     File[] children = ((File)parent).listFiles(); 
     //--- 

     if(children == null) { 
      return 0; 
     } 
     return children.length; 
} 

Ich markierte interessanten Code. Wenn ich diese zwei Zeilen für diese kommentierte geändert habe, bekomme ich manchmal NullPointerException nach dem Laden von TreeModel: jtree.setModel(treeModel);. Dieses unkommentierte Element verursacht keine Probleme. Ich überprüfte die Dokumente und es sagt nichts Ungewöhnliches einschließlich der Rückgabe von null mit beiden Methoden. Was geht hier vor sich?

+0

Der einzige Grund, warum sie unterschiedliche Ergebnisse zurückgeben könnten, wäre der Zustand des Dateisystems, der zwischen den Aufrufen geändert wurde (eine Datei wurde hinzugefügt/entfernt). Der einzige Grund, warum Sie eine NPE aus Datei # listFiles alt bekommen, ist, weil entweder der Pfad, den das Dateiobjekt darstellt, nicht existiert oder kein Verzeichnis ist. – MadProgrammer

Antwort

6

Beide Methoden im Wesentlichen das gleiche, schauen Sie sich http://www.docjar.com/html/api/java/io/File.java.html für Details.

+0

Die Frage ist also: Was passiert mit diesem Modell? – Fuv

+0

vielleicht hatten Sie einfach Glück mit listFiles()? Eine Methode basiert auf der anderen, daher sollten sie konsistente Daten zurückgeben. wo genau erhalten Sie die NPE sowieso, wenn Sie die Kinder haben == null-wenn? Vielleicht Eltern ist null? Whcih Variable ist null? –

+2

das gleiche ... außer dass die 'listFiles()' Methode eine 'File []' zurückgibt, während die 'list()' Methode nur die Datei * names * (d. H. Eine 'String []') zurückgibt. – bvdb