2013-02-13 23 views
8

Tôi có một tập tin với tên "aaaäaa.xls"cả File.isFile() và File.isDirectory() được trả về false

Đối với điều này, File.isFile()File.isDirectory() đang trở lại false? tại sao lại trả lại false trong Linux?

+6

kiểm tra File.exists() và File.canRead() – HectorLector

+1

Có thể đường dẫn bạn đang cung cấp không chính xác. –

+3

'File.isDirectory()' ** nên ** trả về ** false ** trên các tệp. Một điều nữa, đó là '.' sau phần mở rộng tập tin là gì? – Maroun

Trả lời

5

Vui lòng thử ví dụ mã sau

if(!pFile.exists()){ 
    throw new FileNotFoundException(); 
} 

boolean isDir = pFile.isDirectory(); 

boolean isFile = pfile.isFile(); 

tập tin không phải là một tập tin

nếu nó không phải là một thư mục và, ngoài ra, đáp ứng tiêu chuẩn hệ thống phụ thuộc khác

nếu ngoại lệ được ném, bạn phải kiểm tra đường dẫn tệp.

+0

tiêu chí phụ thuộc vào hệ thống là gì? Ngay cả .exits() đang trả về false – user760658

+0

Tôi đang cố di chuyển tệp của mình trong ứng dụng Android của mình. Đối số 'newPath' được truyền vào' renameTo() 'thực sự là một thư mục (được tạo ra trong khi kiểm tra). Xóa thư mục đã giải quyết được sự cố. Đó là một thiết kế kém mà 'renameTo()' không ném bất kỳ loại ngoại lệ nào! – Sufian

2

Kiểm tra quyền của thư mục mẹ của tệp này. Một số thư mục này có thể không có quyền số thực thi cho người dùng hiện tại.

  • Các bit thực hiện của thư mục cho phép người dùng bị ảnh hưởng để nhập và truy xuất file và thư mục bên trong
3

Theo documentation:

công isFile boolean()

Trả lại: đúng nếu và chỉ khi tệp được biểu thị bằng tên đường dẫn trừu tượng này tồn tại và là a bình thường tệp; sai khác.

Từ cơ sở này, tệp của bạn không tồn tại hoặc không phải là tệp bình thường.

Lý do có thể của 1st:

  1. tập tin không tồn tại; Không thể truy cập
  2. tệp;
  3. tên tệp bị nhập sai;
  4. mã hóa ký tự được sử dụng trong chương trình của bạn không phải là giống như được sử dụng khi bạn tạo tệp.

Lý do có thể của 2:

Hoặc đó là lỗi trong JVM. Nó cũng có thể mặc dù không. Ví dụ: cùng một lúc, tôi gặp sự cố với dấu chấm than trong tên đường dẫn - Bug 4523159.

Nếu bạn muốn truy cập tệp theo bất kỳ cách nào, hãy cân nhắc gọi số dir.listFiles() và làm việc với giá trị trả về của tệp.


(câu trả lời là một phần dựa trên this thread)

0

Tôi cũng đã có vấn đề với file.isFile() trở false trên các tập tin, có lẽ vì các tập tin không phải là "bình thường", như đã nêu trong câu trả lời khác để câu hỏi này. Để giải quyết sự cố này, tôi sử dụng file.listFiles() != null, có vẻ như cung cấp chức năng tôi cần. Theo số Java File API:

Nếu tên đường dẫn trừu tượng này không biểu thị thư mục, thì phương thức này sẽ trả về giá trị rỗng. Nếu không, một mảng các đối tượng File được trả về.

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