2013-02-03 19 views
8

Phương thức FileLocator.resolve(url) có thể được sử dụng để dịch địa chỉ bundleentry://something/somewhere/x.txt thành URL tệp thích hợp cho /mnt/foo/somewhere/x.txt.Kết quả thoát của FileLocator.resolve (url)

Tuy nhiên, cũng được ghi lại tại https://bugs.eclipse.org/bugs/show_bug.cgi?id=145096, URL không bị thoát. Ví dụ, nếu bản cài đặt Eclipse chứa gói được tham chiếu nằm trong một thư mục chứa một dấu cách, thì URL được trả về bởi FileLocator.resolve vẫn chứa khoảng trắng và gọi url.toURI() không thành công do điều đó.

  • Làm cách nào để thoát theo cách thủ công tất cả các ký tự cần thiết cần thiết trong URL?
  • Làm cách nào để có được đối tượng File dựa trên đường dẫn tương ứng với gói hiện tại?

Là tài liệu tham khảo, đây là mã mà không thành công khi cố gắng để tìm ra thư mục dir bên trong tập tin .jar Plugin tôi nếu tập tin đó là trong một thư mục có chứa một không gian:

final IPath pathOfExampleProject = new Path("dir"); 
    final Bundle bundle = Platform.getBundle(AproveIDs.PLUGIN_ID); 
    final URL url = FileLocator.find(bundle, pathOfExampleProject, null); 
    final URL url2 = FileLocator.toFileURL(url); 
    url2.toURI(); // Illegal character in path at index [...] 

Trả lời

1

Hai lưu ý thêm:

  • FileLocator.resolve thực sự giải quyết một URL, nhưng nó không nhất thiết phải trả lại một tập tin:/URL. Trong trường hợp mặc định, nơi gói của bạn được đóng gói (trong .jar), bạn nên sử dụng FileLocator.toFileURL, thao tác này sẽ tự động trích xuất tài nguyên vào bộ nhớ cache nếu cần.
  • kể từ Eclipse 4.x hiện nay bao gồm EMF API chung theo mặc định, bạn có thể thoát khỏi URL đơn giản hơn với URI API EMF như sau:

URI resolvedUri = URI.createFileURI(resolved.getPath());

Để có được tên tập tin, gọi resolvedUri.toFileString();

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