2011-09-30 35 views
5

Tôi có một ứng dụng java nơi tôi đang cố tải một tệp văn bản sẽ được đưa vào trong bình.getResource với tham chiếu thư mục mẹ

Khi tôi làm getClass().getResource("https://stackoverflow.com/a/b/c/"), nó có thể tạo URL cho đường dẫn đó và tôi có thể in ra và mọi thứ đều ổn.

Tuy nhiên, nếu tôi thử getClass().getResource(/a/b/../"), thì tôi sẽ nhận được null URL quay lại.

Có vẻ như không giống như .. trong đường dẫn. Bất cứ ai nhìn thấy những gì tôi đang làm sai? Tôi có thể đăng thêm mã nếu nó hữu ích.

+0

Câu hỏi này trả lời câu hỏi tôi sắp đến để tìm kiếm. Tôi có một getResource ("../ icons/SomeIcon.png") trả về null khi tải từ một jar nhưng trả về đúng tài nguyên khi tải từ hệ thống tập tin. Nó hút rằng Java không giải quyết được .. trong cả hai trường hợp. – Trejkaz

Trả lời

5

normalize() methods (có bốn trong số đó) trong lớp FilenameUtils có thể giúp bạn. Nó nằm trong số Apache Commons IO library.

final String name = "https://stackoverflow.com/a/b/../"; 
final String normalizedName = FilenameUtils.normalize(name, true); // "https://stackoverflow.com/a/" 
getClass().getResource(normalizedName); 
+1

Làm việc này thật tuyệt vời. Tôi đã sử dụng phương thức chuẩn hóa (tên, đúng) để giữ các dấu gạch chéo kiểu unix (/) trên các hệ thống cửa sổ. Cảm ơn bạn! –

+0

@Trejkaz: Cảm ơn bạn đã gửi đề xuất chỉnh sửa! Thật không may nó đã bị từ chối bởi những người khác và tôi phải chỉnh sửa nó bằng tay. Để bù lại số điểm +2 đã mất của bạn, tôi đã kiểm tra các bài đăng của bạn và upvoted một vài trong số họ. – palacsint

2

Đường dẫn bạn chỉ định trong getResource() không phải là đường dẫn hệ thống tệp và không thể được giải quyết theo cách giống như đường dẫn được đối tượng File (và ilk của nó giải quyết). Tôi có thể lấy nó mà bạn đang cố đọc tài nguyên liên quan đến một đường dẫn khác không?

+0

Ya vì vậy tôi nhận được một phần của con đường từ những nơi khác nhau trong mã, vì vậy tôi khi tôi kết hợp các chuỗi họ có ".." trong đó. Tôi không cố gắng phá vỡ thư mục cơ sở mà tôi nhận được với getResource ("/"). Tài nguyên tôi đang cố gắng đọc có liên quan đến một đường dẫn khác, nhưng vẫn còn bên trong bình và thứ gì đó mà tôi có thể đọc nếu tôi tự xóa ".." khỏi đường dẫn. Có lẽ đó là những gì tôi sẽ phải làm. –

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