2013-03-12 8 views
10

Sorum şu: Bu iki fonksiyonun farklı bir şey var mı? Demek istediğim farklı bir şey döndürdüğünü biliyorum, ancak birindeki elemanların sayısının ikincisinden farklı olması muhtemeldir. Anlatmaya çalışacağım. JTree'ye dayanan PC'deki dosyalarda güzel bir görünüm oluşturmaya çalışırken sınıfımdan bir tanesi için TreeModel uygulamasını hayata geçirdim. İşte burada bunun bir kısmı: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; 
} 

İlginç bir kod yazdım. Bu iki satırı değiştirdiysem, bazen TreeModel'i yükledikten sonra NullPointerException alırım: jtree.setModel(treeModel);. Bu rahatsız edilmeyen sorunlara neden olmaz. Dokümanları kontrol ettim ve her iki yöntemle de null döndürme dahil olağandışı hiçbir şey söylemiyor. Burada neler oluyor?

+0

Farklı sonuçlar verebilmesinin tek nedeni, dosya sistemi durumlarının aramalar arasında değişmesidir (bir dosya eklendi/kaldırıldı). File # listFiles'den bir NPE almanın tek nedeni, ya dosya nesnesinin temsil ettiği yolun mevcut olmaması ya da bir dizin olmamasıdır. – MadProgrammer

cevap

6

Her iki yöntem de esas olarak aynıdır, detaylar için http://www.docjar.com/html/api/java/io/File.java.html'a bakın.

+0

Yani soru şu: bu modelle neler oluyor? – Fuv

+0

belki sadece listFiles() kullanarak şanslı oldun mu? Bir yöntem diğerine dayanır, bu yüzden tutarlı veriler döndürmelidir. Eğer çocuklarınız varsa, NPE'yi tam olarak neredeyseniz == null-if? Belki de ebeveyn null? Whcih değişkeni null mı? –

+2

aynı ... "listFiles()" yöntemi bir 'Dosya []' döndürdüğü halde, 'list()' yöntemi sadece dosya * isimlerini * döndürür (yani bir 'String []'). – bvdb