2010-07-16 28 views
21

Tôi đang có các dòng mã sau đây.vấn đề sysLoader.getResource() trong java

sysLoader = (URLClassLoader)Thread.currentThread().getContextClassLoader(); 
url = sysLoader.getResource("tempFile.txt"); 

Nó đang gây ra vấn đề lạ. Nếu tôi chạy điều này từ một con đường mà không có không gian trong đường dẫn (tên thư mục) thì nó đang chạy tốt. Nhưng nếu đường dẫn chứa bất kỳ dấu cách nào (dòng "c: \ New Foler ...") thì nó không hoạt động.

Cách giải quyết vấn đề này?

EDIT: Chi tiết hơn - Tôi đã kiểm tra đối tượng sysloader.

sysloader -> UCP -> con đường

Là có một con đường với nhân vật% 20 thay vì không gian

Và do đó tất cả các URL là null.

Cách giải quyết vấn đề này?

+0

Xác định "không hoạt động". Nó có trả lại 'null' không? Hoặc 'URL' được trả về không hoạt động trong một số ngữ cảnh? –

+0

Nó đang trả về NULL trong URL – Vishal

Trả lời

31

này được biết đến bởi Sun/Oracle, lời khuyên của họ là sử dụng đối tượng URI mà sẽ loại bỏ các ký tự% 20:

Thay vì làm điều này:

FileInputStream fis = new FileInputStream(url.getFile()); 

bạn có thể buộc bất kỳ Các ký tự được tách hình% được giải mã bằng cách đầu tiên chuyển đổi URL thành URI và sau đó sử dụng thành phần đường dẫn của URI làm tên tệp:

URI uri = new URI(url.toString()); 
FileInputStream fis = new FileInputStream(uri.getPath()); 
+1

Đây là báo cáo tương ứng nhưng được đánh dấu là "Sẽ không sửa": http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4466485. Lỗi/tính năng này vẫn tồn tại trong Java 1.7. – asmaier

+5

Phiên bản ngắn hơn mà không chuyển đổi rõ ràng thành chuỗi và quay lại URI sẽ là: 'URI uri = url.toURI(); ' ' FileInputStream fis = new FileInputStream (uri.getPath()); ' – Thomas

0

Để lấy URL của tập tin từ chuỗi, khi con đường chứa dấu cách, đây là những gì làm việc cho tôi:

File file = new File("/Users/work space/tempFile.txt"); 
URL url = file.toURI().toURL(); 

Theo Javadocs, file.toURL()deprecated:

Phương pháp này không tự động thoát khỏi nhân vật mà là bất hợp pháp trong URL. Chúng tôi khuyên rằng mã mới sẽ chuyển đổi tên đường dẫn trừu tượng thành URL bằng cách chuyển đổi nó thành URI lần đầu tiên, thông qua phương thức toURI và sau đó chuyển đổi URI thành URL thông qua phương thức URI.toURL.

Do đó được sử dụng file.toURI().toURL().

Đối với Java 7+, đây là phương pháp có thể được thực hiện thay vì:

URL url = Paths.get("/Users/work space/tempFile.txt").toURI().toURL()); 

Note: Nếu đường dẫn bắt đầu với một / nó được coi là tuyệt đối khác thực hiện như là một đường dẫn tương đối.

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