2010-06-23 27 views
30

Trong dự án Maven tôi, tôi có đoạn mã sau trong phương thức main:Đường dẫn đến tệp tài nguyên trong dự án Maven là gì?

FileInputStream in = new FileInputStream("database.properties"); 

nhưng luôn có được một tập tin không tìm thấy lỗi.

Tôi đã đặt tệp vào src/main/resources và được sao chép đúng vào thư mục đích/lớp (tôi tin đó là hành vi mong đợi đối với tài nguyên Maven) nhưng khi thực sự chạy chương trình, có vẻ như nó không bao giờ tìm thấy tập tin. Tôi đã thử nhiều đường dẫn khác:

FileInputStream in = new FileInputStream("./database.properties"); 
FileInputStream in = new FileInputStream("resources/database.properties"); 

v.v. nhưng không có gì có vẻ hiệu quả.

Vì vậy, con đường thích hợp để sử dụng là gì?


Dựa trên "disown của" trả lời dưới đây, đây là những gì tôi cần:

InputStream in = TestDB.class.getResourceAsStream("/database.properties") 

nơi TestDB là tên của lớp.

Cảm ơn sự giúp đỡ của bạn, đã bị xóa!

Trả lời

51

Bạn không thể tải tệp trực tiếp như vậy, bạn cần sử dụng trừu tượng tài nguyên (tài nguyên không chỉ nằm trong hệ thống tệp mà còn ở bất kỳ vị trí nào trên đường dẫn lớp - trong tệp jar hoặc cách khác). Sự trừu tượng này là những gì bạn cần sử dụng khi tải tài nguyên. Đường dẫn tài nguyên liên quan đến vị trí của tệp lớp học của bạn, vì vậy bạn cần phải thêm một dấu gạch chéo để vào 'gốc':

InputStream in = getClass().getResourceAsStream("/database.properties"); 
+0

Nếu bạn đang cố truy cập tệp từ phương thức tĩnh, getClass() không hoạt động. Có một sự thay thế trong trường hợp đó? – acarlow

+4

Sử dụng tên lớp, ví dụ: Main.class.getResourceAsStream(). Bạn có thể sử dụng bất kỳ lớp hoặc trình nạp lớp nào, do đó hread.getContextClassLoader(). GetResourceAsStream() cũng hoạt động. –

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