Tôi hơi bị kẹt trong một dự án mà tôi đang làm việc ở nơi tôi muốn tải trong một tệp văn bản từ một thư mục khác. Tôi đang sử dụng Netbeans và có, vì mục đích của vấn đề này, hai thư mục, một với lớp của tôi và một thư mục có tài nguyên.Các sự cố khi sử dụng Class.getResourceAsStream() trong Java
Lớp học ở ../misc/[ClassName]
và tệp văn bản tôi muốn tải là Trong số ../resources/[Name].txt
Điều này nghe có vẻ không thể tin được, và đã thực hiện Java trong một thời gian. Tôi cho rằng cách tốt nhất để tải tệp này thay vì chỉ sử dụng FileReader sẽ là sử dụng getResourceAsStream
, như được hiển thị:
InputStream is =
this.getClass().getClassLoader().getResourceAsStream(_filename + ".txt");
Lý tưởng giúp tôi tiết kiệm thời gian và không phải mã hóa trong một tệp ath. Bây giờ, vấn đề của tôi là tôi liên tục giữ null trở lại từ mã trên, và thực sự bất kỳ hoán vị khác tôi có thể đưa vào nó. Tôi đã thử /resource/filename.txt
hoặc resource/filename.txt
làm tham số, sử dụng .getClass().getResourceAsStream
như trái ngược với getClassLoader()
, mọi thứ vẫn trả về cùng một kết quả.
Để tránh bất kỳ sự nhầm lẫn nào, tôi đã kiểm tra tên tệp và chắc chắn tên tệp cũng như trong đúng trường hợp, v.v., vì vậy đó không phải là vấn đề. Bất kỳ ý tưởng? Tôi biết tôi chỉ có thể sử dụng FileReader
để hoàn thành cùng một mục tiêu, nhưng nó là một loại nguyên tắc ngay bây giờ!
Đúng, bỏ 'getClassLoader()' sẽ sửa lỗi. Ít nhất, nó đã làm cho tôi làm: 'getClass(). GetResourceAsStream (" ../ resources/filename.txt ")' – Ash
@Ash: điều này làm cho không có sự khác biệt. 'Cls.getResourceAsStream()' chỉ là một cách viết tắt cho 'cls.getClassLoader(). GetResourceAsStream()'. – BalusC
@ BalusC: nó tạo ra tất cả sự khác biệt trong một ứng dụng thử nghiệm mà tôi đã cố gắng để tái tạo sự cố. Với thêm "getClassLoader()" nó trả về null, không trả về luồng (hoặc URL cho 'getResource()'). – Ash