Tôi gặp sự cố khi sử dụng phương thức getClass().getResource("filename.txt")
. Khi đọc hướng dẫn tài liệu Java, nếu tài nguyên của bạn không nằm trong cùng gói với lớp bạn đang cố truy cập tài nguyên, thì bạn phải cung cấp cho nó đường dẫn tương đối bắt đầu bằng '/'
. Chiến lược được đề xuất là đặt các tệp tài nguyên của bạn trong thư mục "tài nguyên" trong thư mục gốc.Vì vậy, ví dụ nếu bạn có cấu trúc:
src/main/com/mycompany/myapp
sau đó bạn có thể thêm một thư mục nguồn lực theo khuyến cáo của maven trong:
src/main/resources
hơn nữa bạn có thể thêm các thư mục con trong thư mục nguồn
src/main/resources/textfiles
và nói rằng tệp của bạn được gọi là myfile.txt
để bạn có
src/main/resources/textfiles/myfile.txt
Bây giờ, đây là nơi có vấn đề về đường dẫn ngu ngốc. Giả sử bạn có một lớp trong số com.mycompany.myapp package
và bạn muốn truy cập tệp myfile.txt
từ thư mục tài nguyên của mình. Một số người nói bạn cần phải cung cấp cho các:
"/main/resources/textfiles/myfile.txt" path
hoặc
"/resources/textfiles/myfile.txt"
cả trong số này là sai. Sau khi tôi chạy mvn clean compile
, các tệp và thư mục được sao chép trong:
myapp/target/classes
thư mục. Nhưng thư mục tài nguyên không có ở đó, chỉ các thư mục trong thư mục tài nguyên. Vì vậy, bạn có:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp/*
nên đường dẫn chính xác để cung cấp cho các phương pháp getClass().getResource("")
là:
"/textfiles/myfile.txt"
ở đây là:
getClass().getResource("/textfiles/myfile.txt")
này sẽ không còn trở về null, nhưng sẽ trả lại lớp học của bạn. Tôi hy vọng điều này sẽ giúp ai đó. Điều lạ lùng với tôi là thư mục "resources"
cũng không được sao chép, mà chỉ là các thư mục con và tệp trực tiếp trong thư mục "resources"
. Nó có vẻ hợp lý với tôi rằng thư mục "resources"
cũng sẽ được tìm thấy dưới "myapp/target/classes"
class.getClass() là không giống như class.getClassLoader(). Có một giải pháp khác nữa, getResourceAsStream() sử dụng một lớp trong cùng một gói với tài nguyên của bạn. Để biết thêm chi tiết: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html. – JVerstry
Xem thêm http://stackoverflow.com/questions/204784/how-to-construct-a-relative-path-in-java-from-two-absolute-paths-or-urls – Vadzim