2010-03-15 16 views
6

Xin xem đoạn mã:Java File.isDirectory() trả về False cho một thư mục trong Linux

File[] additionalFiles = new File(FILE_PATH).listFiles(); 
boolean isDirectory = file.isDirectory(); 

Tôi đã xác minh rằng đường dẫn thư mục là đúng, và khi tôi chạy mã trên Windows, giá trị của isDirectory là đúng (như nó phải là). Bất kỳ đề xuất nào về lý do tại sao điều này xảy ra trên Linux (RedHat Enterprise Linux)?

+0

Thư mục có phải là một thư mục thông thường hoặc một liên kết tượng trưng không? Phiên bản Java nào? Phiên bản RH nào? Thư mục có chứa bất kỳ ký tự không bình thường (không phải tiếng Anh) nào không? – Yishai

+1

Giá trị của 'FILE_PATH' là gì? Liệu nó có khả năng chứa các dấu phân tách tệp kiểu Windows ('\') không? –

+0

Tôi tin rằng đó là một simlink, thư mục này nằm ngoài một máy chủ chia sẻ - nó tác động như thế nào? Phiên bản Java là 6 bản cập nhật 17. Phiên bản RH là Enterprise RedHat 5. Thư mục chứa tất cả các chữ thường, không có ký tự đặc biệt và bộ tách tệp là chính xác (tôi đã in ra thư mục khi chạy chương trình, sau đó sao chép và dán nó trong dòng lệnh sau "cd" và thành công và cd'd vào thư mục). – shelt536

Trả lời

6

Các liên kết không đọc dưới dạng thư mục, nếu tôi nhớ chính xác. Đúng cách xung quanh đó là:

new File(FILE_PATH).getCanonicalFile().isDirectory(); 

(LƯU Ý: Tôi chưa có hộp linux để kiểm tra điều này một cách dễ dàng).

0

Thanh toán liên kết này http://bugs.sun.com/view_bug.do;jsessionid=56e03cb783aaf9725daf5ec8d8?bug_id=6539692

Bạn có thể có vấn đề này.

Nếu không, tôi sẽ đoán có vấn đề với quyền truy cập tệp (mặc dù có thể vứt bỏ ngoại lệ bảo mật và tôi giả định mã của bạn không quấn và trả về false) hoặc có thể là vấn đề liên kết sym mà tôi không biết nhiều.

5

Tôi đã gặp sự cố này một lần. Trường hợp của tôi rất buồn cười, tôi đã đọc đường dẫn từ tệp thuộc tính và đường dẫn đó chứa ký tự tab ở cuối chuỗi. Đó là lý do tại sao đường dẫn không được nhận dạng là một thư mục

+0

Bạn và tôi cả :) – bjornl

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