2013-03-18 77 views
18

Tôi muốn có thể liệt kê các tệp trong thư mục hiện tại. Tôi đã làm một cái gì đó mà nên làm việc nhưng không trả lại tất cả các tên tập tin.Cách liệt kê các tệp trong thư mục hiện tại?

File dir = new File("."); 
File[] filesList = dir.listFiles(); 
for (File file : filesList) { 
    if (file.isFile()) { 
     System.out.println(file.getName()); 
    } 
} 

Nó trả về .classpath, nhưng tôi khá chắc chắn tôi có các tệp java khác bên trong thư mục này. Có thể ký hiệu chấm cho thư mục hiện tại không chính xác?

+1

* "Tôi chắc chắn mình có các tệp java khác trong thư mục này" * Đặt tên cho chúng (để chúng tôi có thể chắc chắn hơn). –

+1

Tôi không thấy bất kỳ điều gì sai với mã của bạn và đầu ra của bạn. – Maroun

+0

Vui lòng cung cấp danh sách công cụ có thể so sánh, như dir trên windows hoặc ls -l trên unix, để so sánh. – Ingo

Trả lời

8

Có thể ký hiệu dấu chấm cho thư mục hiện tại không chính xác?

In kết quả của File.getCanonicalFile() để kiểm tra đường dẫn.

Bất cứ ai có thể giải thích cho tôi tại sao src không phải là thư mục hiện tại?

IDE của bạn đang đặt đường dẫn lớp khi gọi JVM.

E.G. (đạt cho Netbeans) Nếu bạn chọn menu File | Project Properties (all classes) bạn có thể thấy một cái gì đó tương tự như:

Netbeans project options

Đây là Working Directory này rất hấp dẫn đây.

1

Bạn nên xác minh rằng new File(".") thực sự trỏ đến nơi bạn nghĩ rằng đó là chỉ - .classpath cho thấy nguồn gốc của một số dự án Eclipse ....

+11

* "Bạn nên .." * Bạn nên làm cho nhận xét này. –

17

Hãy thử điều này, để lấy tất cả các file trong thư mục và thư mục con

public static void main(String[]args) 
    { 
     File curDir = new File("."); 
     getAllFiles(curDir); 
    } 
    private static void getAllFiles(File curDir) { 

     File[] filesList = curDir.listFiles(); 
     for(File f : filesList){ 
      if(f.isDirectory()) 
       getAllFiles(f); 
      if(f.isFile()){ 
       System.out.println(f.getName()); 
      } 
     } 

    } 

để lấy các tập tin/thư mục chỉ

public static void main(String[]args) 
    { 
     File curDir = new File("."); 
     getAllFiles(curDir); 
    } 
    private static void getAllFiles(File curDir) { 

     File[] filesList = curDir.listFiles(); 
     for(File f : filesList){ 
      if(f.isDirectory()) 
       System.out.println(f.getName()); 
      if(f.isFile()){ 
       System.out.println(f.getName()); 
      } 
     } 

    } 
+0

Tôi đoán ở đây người dùng đang nói rằng anh ấy muốn in tất cả các tệp hiện có trong 'Thư mục hiện tại' .. Không có trong thư mục con nữa !! –

+0

cảm ơn nó hoạt động ... – saman

1

Đã có một snoop nhanh chóng xung quanh với bộ phim này, nhưng điều này có vẻ như nó sh ould làm việc. Tôi chưa thử nghiệm nó.

File f = new File("."); // current directory 

    File[] files = f.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory()) { 
      System.out.print("directory:"); 
     } else { 
      System.out.print("  file:"); 
     } 
     System.out.println(file.getCanonicalPath()); 
    } 
0

Không có gì sai với mã của bạn. Nó nên liệt kê tất cả các tập tin và thư mục trực tiếp chứa trong thư mục được chỉ định.

Vấn đề là nhiều khả năng một trong các cách sau:

  • Thư mục "." không phải là những gì bạn mong đợi nó được. Tên đường dẫn "." thực sự có nghĩa là "thư mục hiện tại" hoặc "thư mục làm việc" cho JVM. Bạn có thể xác minh thư mục "." thực sự là bằng cách in ra dir.getCanonicalPath().

  • Bạn hiểu sai về số tiền dir.listFiles() trả về. Nó không trả về tất cả các đối tượng trong cây bên dưới dir. Nó chỉ trả về các đối tượng (tệp, thư mục, liên kết tượng trưng, ​​v.v.) là trực tiếp trong dir.

File ".classpath" cho thấy rằng bạn đang nhìn vào một thư mục dự án Eclipse và các dự án Eclipse là thường cấu hình với các tập tin Java trong thư mục con như "./src". Tôi sẽ không mong đợi để xem bất kỳ mã nguồn Java nào trong thư mục ".".


bất cứ ai có thể giải thích cho tôi tại sao src không phải là thư mục hiện tại?"

Giả sử rằng bạn đang tung ra một ứng dụng trong Eclipse, sau đó thư mục hiện hành mặc định cho dự án Bạn có thể thay đổi thư mục hiện tại mặc định thông qua một trong các bảng trong trình hướng dẫn cấu hình Trình khởi chạy

+0

repost của bình luận khác của tôi, "Tôi nghĩ rằng tôi có thể đã tìm thấy vấn đề.Tôi giả định thư mục hiện tại là tại thư mục src (nhật thực) nhưng trong thực tế ký hiệu chấm điểm vào thư mục bên ngoài của src Tuy nhiên, thư mục src là thư mục tôi lưu các tệp của mình - do đó tôi cho rằng đó là thư mục hiện tại. Có ai giải thích cho tôi tại sao src không phải là thư mục hiện tại không? " – Martynogea

0

Mã của bạn cho kết quả mong đợi, nếu bạn biên dịch và chạy mã độc lập (từ dòng lệnh). Như trong nhật thực cho mỗi dự án theo thư mục làm việc mặc định là thư mục dự án đó là lý do tại sao bạn nhận được kết quả này.

Bạn có thể thiết lập thuộc tính user.dir trong java như:

System.setProperty("user.dir", "absolute path of src folder"); 

sau đó nó sẽ cho kết quả mong đợi.

+0

Ummm ...điều này sẽ không hoạt động. Không có cách nào để thay đổi 'File mới (".") 'Có nghĩa là gì trong Java thuần túy. –

+0

Tham khảo: http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java –

0

Tôi đã sử dụng câu trả lời này với thư mục cục bộ của mình (ví dụ: E://) nó hoạt động tốt cho thư mục đầu tiên và thư mục thứ hai xuất ra một ngoại lệ con trỏ rỗng, sau khi tìm kiếm lý do tôi phát hiện ra sự cố tạo bởi thư mục ẩn và thư mục này được tạo bởi cửa sổ để tránh sự cố này chỉ sử dụng

public void recursiveSearch(File file) { 
File[] filesList = file.listFiles(); 
    for (File f : filesList) { 
     if (f.isDirectory() && !f.isHidden()) { 
      System.out.println("Directoy name is -------------->" + f.getName()); 
      recursiveSearch(f); 
     } 
     if(f.isFile()){ 
      System.out.println("File name is -------------->" + f.getName()); 
     } 
    } 
} 
Các vấn đề liên quan