Làm cách nào để chuyển đổi tên của tệp trên đường dẫn lớp thành tên tệp thực?Chuyển đổi tên tệp classpath thành tên tệp thực
Ví dụ: giả sử thư mục "C:\workspace\project\target\classes"
nằm trên đường dẫn lớp của bạn. Trong thư mục đó là một tệp, chẳng hạn như info.properties
.
Làm cách nào bạn xác định (khi chạy) đường dẫn tệp tuyệt đối cho tệp info.properties, chỉ được cung cấp chuỗi "info.properties"
?
Kết quả sẽ là một cái gì đó như "C:\workspace\project\target\classes\info.properties"
.
Tại sao điều này hữu ích? Khi viết các bài kiểm tra đơn vị, bạn có thể muốn truy cập các tệp được nhúng trong tài nguyên thử nghiệm của mình (src/main/resources
) nhưng đang làm việc với thư viện của bên thứ ba hoặc hệ thống khác yêu cầu tên tệp thực, chứ không phải tham chiếu classpath tương đối.
Lưu ý: Tôi đã tự trả lời câu hỏi này, vì tôi cảm thấy đây là một mẹo hữu ích, nhưng có vẻ như chưa ai từng hỏi câu hỏi này trước đây.
Điều này sẽ tạo ra gì nếu tài nguyên bên trong một cái lọ? – radai
@radai đây là ví dụ về kết quả cho tệp trong một tệp jar: 'tệp:/C: /tools/some/path/jarfile.jar!/Internal/path/file.txt'. Để tìm một tập tin như vậy bằng cách sử dụng câu trả lời ở trên, bạn phải cung cấp một đường dẫn liên quan đến gốc jar - tức là. '" internal/path/file.txt "' – GreenGiant
@radai Ngoài ra, hãy kiểm tra [this] (http://stackoverflow.com/questions/12025689/filenotfoundexception-when-exporting-jar/12025740#12025740) –