Tôi có cấu trúc đường dẫn sau để lớp chính:Làm thế nào để đọc một tập tin thuộc tính trong java từ bên ngoài thư mục Class?
D:/java/myapp/src/manClass.java
và tôi muốn đặt nộp các thuộc tính trong
D:/java/myapp/config.properties
đó sẽ chứa một tên tập tin và một số cấu hình khác. Tôi sẽ đặt tên tập tin trong tập tin thuộc tính như thế này: file=file_to_read.txt
file_to_read.txt
này sẽ được đặt tại D:/java/myapp/folder_of_file/
Các lớp học chính sẽ đọc tên tập tin từ tập tin thuộc tính đầu tiên và sau đó nhận được các nội dung hình thành các tập tin .
Tôi có thể làm điều này nếu cả hai config.properties
và file_to_read.txt
đều ở trong src/
với mainClass.java
. Nhưng không thể thành công với cách tôi muốn làm.
Ai có thể giúp tôi với điều này? Tôi cần đề xuất của bạn về những gì tôi có thể làm nếu tôi muốn đặt thư mục myapp
ở bất cứ nơi nào trong ổ đĩa của tôi với cùng cấu trúc bên trong trong đó tôi mô tả ở trên và chương trình sẽ thực hiện công việc một cách chính xác.
Tôi cũng cần đề xuất của bạn rằng nếu tôi muốn thực hiện công việc từ bình được tạo sau khi xây dựng dự án thì tôi có thể làm điều đó mà không có vấn đề gì không?
Tôi đã thử như sau chỉ để đọc tập tin thuộc tính:
URL location = myClass.class.getProtectionDomain().getCodeSource().getLocation();
String filePath = location.getPath().substring(1,location.getPath().length());
InputStream in = myClass.class.getResourceAsStream(filePath + "config.properties");
prop.load(in);
in.close();
System.out.println(prop.getProperty("file"));
Nhưng điều này mang lại phạm sai lầm khi cố gắng getProperty từ nộp các thuộc tính. Cảm ơn!
Có, sử dụng giải pháp đầu tiên của BalusC. – Klinetel
Cảm ơn, nó đã làm việc cho tôi. Nhưng, tôi cần phải thêm một bình luận. Nếu bạn thêm thư mục vào classpath, thì bạn không cần phải chỉ định thư mục khi nhận tài nguyên dưới dạng stream, điều đó có nghĩa là bạn chỉ cần gọi getResourceAsStream ("/ config.properties") ngay cả khi tệp đó nằm trong thư mục có tên tài nguyên –
@ Jesus: Có, nó có ý định sử dụng nội dung của thư mục giống như tất cả các thư mục khác đã có trong classpath (mặc định). – BalusC