Nếu nó đã có trong classpath, thì chỉ cần lấy nó từ classpath thay vì từ hệ thống tệp đĩa. Đừng loay hoay với các đường dẫn tương đối vào java.io.File
. Chúng phụ thuộc vào thư mục làm việc hiện tại mà bạn hoàn toàn không có quyền kiểm soát từ bên trong mã Java.
Giả sử nó ListStopWords.txt
nằm trong cùng một gói với FileLoader
lớp của bạn , thì hãy thực hiện:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
Hoặc nếu tất cả những gì bạn đang theo đuổi thực sự là InputStream
của nó:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Điều này chắc chắn được ưu tiên hơn việc tạo một new File()
vì url
có thể không nhất thiết đại diện cho đường dẫn hệ thống tệp đĩa, nhưng nó cũng có thể đại diện cho đường dẫn hệ thống tệp ảo (có thể xảy ra khi JAR được mở rộng vào bộ nhớ thay vì vào một thư mục tạm thời trên hệ thống tệp đĩa) hoặc thậm chí là một đường dẫn mạng mà cả hai đều không thể tiêu hóa theo định nghĩa bởi hàm File
tạo.
Nếu tệp - như tên gói gợi ý- thực sự là một tệp thuộc tính có giá trị đầy đủ (chứa key=value
các dòng) chỉ với phần mở rộng "sai", thì bạn có thể cung cấp InputStream
ngay lập tức cho load()
phương thức.
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Lưu ý: khi bạn đang cố gắng truy cập nó từ static
ngữ cảnh bên trong , hãy sử dụng FileLoader.class
(hoặc bất cứ điều gì YourClass.class
) thay vì getClass()
trong các ví dụ trên.
properties.files
định cho2
?