2012-01-11 38 views
6

Tôi có đối tượng IFile cần sử dụng làm đối tượng java.io.File. Tôi đang chuyển đổi bằng cách sử dụng mã sau đây.Chuyển đổi IFile thành Tệp

file = ifile.getFullPath().toFile(); 

Nhưng cuộc gọi đến file.exists() trả về giá trị sai.

+0

"Nhưng cuộc gọi đến file.exists() trả về false". Điều đó có nghĩa là tệp không thoát hoặc đường dẫn không hợp lệ. Bạn cũng thử 'ifile.exists()'? –

Trả lời

9

Bạn muốn sử dụng IResource.getLocation() để trả về đường dẫn tệp cục bộ. Tuy nhiên, hãy đọc kỹ các chú thích javadoc vì bạn không thể giả định rằng một tài nguyên được hỗ trợ bởi một tệp thực sự (nó có thể là bất cứ điều gì phụ thuộc vào cách dự án được thiết lập).

+4

Đề xuất của Francis hoạt động tốt. Một tùy chọn khác mà cuối cùng tôi đã sử dụng là 'file = ifile.getRawLocation(). MakeAbsolute(). ToFile();' – Viral

3

IFile là một phần của truy vấn đối với không gian làm việc sửa đổi, không phải tệp thực tế. IPath cũng là một phần của truy vấn hợp lệ trên Vùng làm việc.

Một IFile có thể không được chứa bởi không gian làm việc, ví dụ: Dự án Gon Clonned. Một số IFile có thể là một liên kết chỉ, không phải là tệp thực tế. Và một số IFile có thể thực sự tồn tại ở vị trí hẻo lánh.

Eclipse sử dụng Hệ thống tệp độc lập được gọi là "EFS". EFS quản lý các tệp trên không gian làm việc và hệ thống tệp gốc. Bạn có thể định vị tệp cục bộ bằng EFS. (Nếu nó tồn tại ở địa phương)

IFile file = ...; 

// gets URI for EFS. 
URI uri = file.getLocationURI(); 

// what if file is a link, resolve it. 
if(file.isLinked()){ 
    uri = file.getRawLocationURI(); 
} 

// Gets native File using EFS 
File javaFile = EFS.getStore(uri).toLocalFile(0, new NullProgressMonitor()); 
Các vấn đề liên quan