2013-03-12 9 views
10

La mia domanda è: se queste due funzioni hanno qualcosa di diverso? Voglio dire, so che restituiscono qualcosa di diverso, ma è possibile che il numero di elementi in uno sia diverso dal secondo. Proverò a spiegare. Ho implementato TreeModel per una delle mie classi cercando di ottenere una buona visualizzazione dei file sul PC basandomi su JTree. Quindi ecco la parte di esso: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; 
} 

Ho contrassegnato il codice interessante. Se ho modificato queste due righe per questo commento, a volte ricevo NullPointerException dopo aver caricato TreeModel: jtree.setModel(treeModel);. Questo non commentato non causa alcun problema. Ho controllato i documenti e non dice nulla di insolito, compreso il ritorno null con entrambi i metodi. Che cosa sta succedendo qui?

+0

L'unico motivo per cui potrebbero restituire risultati diversi sarebbe perché lo stato del file system è cambiato tra le chiamate (un file è stato aggiunto/rimosso). L'unico motivo per cui un vecchio utente ottiene un NPE da File # listFiles è perché il percorso rappresentato dall'oggetto file non esiste o non è una directory – MadProgrammer

risposta

6

Entrambi i metodi sono essenzialmente gli stessi, per i dettagli consultare http://www.docjar.com/html/api/java/io/File.java.html.

+0

Quindi la domanda è: che cosa sta succedendo con questo modello? – Fuv

+0

forse sei stato fortunato ad usare listFiles()? Un metodo è basato sull'altro, quindi dovrebbero restituire dati coerenti. dove esattamente si ottiene comunque il NPE se si hanno i figli == null-if? Forse il genitore è nullo? Quale variabile è nulla? –

+2

lo stesso ... eccetto che il metodo 'listFiles()' restituisce un 'File []', mentre il metodo 'list()' restituisce solo il file * nomi * (ad esempio 'String []'). – bvdb

Problemi correlati