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?
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