2013-03-12 20 views
10

Câu hỏi của tôi là: nếu hai chức năng này có điều gì đó khác biệt? Tôi có nghĩa là tôi biết rằng họ trả lại một cái gì đó khác nhau, nhưng có thể là số lượng các yếu tố trong một sẽ khác nhau sau đó trong một thứ hai. Tôi sẽ cố gắng để giải thích. Tôi đã triển khai TreeModel cho một trong các lớp học của tôi đang cố gắng tạo ra một khung nhìn đẹp trên các tệp trên máy tính dựa trên JTree. Vì vậy, đây là một phần của nó: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; 
} 

Tôi đã đánh dấu mã thú vị. Nếu tôi thay đổi hai dòng này cho nhận xét này, đôi khi tôi nhận được NullPointerException sau khi tải TreeModel: jtree.setModel(treeModel);. Điều này không được chú ý không gây ra bất kỳ rắc rối nào. Tôi đã kiểm tra các tài liệu và nó nói không có gì bất thường bao gồm cả trả về null bởi cả hai phương pháp. Chuyện gì đang xảy ra ở đây?

+0

Lý do duy nhất họ có thể trả về các kết quả khác nhau là do trạng thái của hệ thống tệp đã thay đổi giữa các cuộc gọi (tệp được thêm/xóa). Lý do duy nhất bạn cũ có được một NPE từ File # listFiles là bởi vì một trong hai đường dẫn mà đối tượng tập tin đại diện không tồn tại hoặc không phải là một thư mục – MadProgrammer

Trả lời

6

Cả hai phương pháp về cơ bản giống nhau, hãy xem http://www.docjar.com/html/api/java/io/File.java.html để biết chi tiết.

+0

Vì vậy, câu hỏi là: những gì đang xảy ra với mô hình này? – Fuv

+0

có thể bạn đã may mắn khi sử dụng listFiles()? Một phương pháp dựa trên phương pháp khác, vì vậy chúng phải trả về dữ liệu nhất quán. nơi nào bạn nhận được NPE anyways nếu bạn có con == null-if? Có lẽ cha mẹ là null? Whcih biến là null? –

+2

giống nhau ... ngoại trừ phương thức 'listFiles()' trả về một 'File []', trong khi phương thức 'list()' chỉ trả về tệp * names * (tức là một 'String []'). – bvdb