2010-03-18 49 views
8

tôi có các đối tượng tập tin sau trỏ đến một thư mục thông qua liên kết tượng trưng, ​​listFiles() của Tệp không hoạt động trên các liên kết tượng trưng?

File directory = new File("/path/symlink/foo/bar"); 
String[] files = directory.listFiles(); 

listFiles() trả về null, là này vì các liên kết tượng trưng? nếu có, làm thế nào tôi sẽ đi về điều này nếu tôi thực sự muốn liệt kê các tập tin trong thanh bằng cách sử dụng đường dẫn có chứa một liên kết tượng trưng?

Trả lời

14

Theo những gì tôi đã nhìn thấy trong khi Googling hành vi khó hiểu này, Java đòi hỏi bạn phải gọi .getCanonicalFile() trên File mà đường dẫn chứa một liên kết trước khi bạn có thể sử dụng nó trong các hoạt động tập tin khác .

Vì vậy:

File directory = new File("/path/symlink/foo/bar").getCanonicalFile(); 
String[] files = directory.listFiles(); 
0

..extending gì @mickthompson đề nghị, bằng cách sử dụng NIO File library (> Java 7), bạn có thể:

Path link = Paths.get("/path/symlink/foo/bar"); 
if (Files.isSymbolicLink(link)) { 
    link = Files.readSymbolicLink(link); 
} 

Path[] files = Files.list(link).toArray(size -> new Path[size]); 

Path có thể dễ dàng chuyển đổi sang File vì vậy tất cả mã Java IO cũ của bạn có thể được giữ an toàn, @seePath#toFile().

0

Điều này được khắc phục cho bản phát hành 3.0.1. Sau khi được phát hành, hãy thử và cho chúng tôi biết nếu bạn vẫn gặp sự cố bằng cách mở một lỗi mới, liên kết lại với this one cho ngữ cảnh.

Các vấn đề liên quan