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.txtnằm trong cùng một gói với FileLoaderlớ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à InputStreamcủ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ì urlcó 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 Filetạ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=valuecác dòng) chỉ với phần mở rộng "sai", thì bạn có thể cung cấp InputStreamngay 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ừ staticngữ 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?