2013-03-03 37 views
8

Tôi cố gắng để đọc một tài nguyên đó sẽ được đưa vào một .JAR, nhưng tôi nhận được một nullPointer sau:Đọc một tài nguyên với BufferedReader

bReader = new BufferedReader(new InputStreamReader(
        this.getClass().getResourceAsStream("resources/" + fileName))); 

Sử dụng một tập tin Tuy nhiên, hoạt động tốt ..

bReader = new BufferedReader(new FileReader(new File("resources/" + fileName))); 
+0

Bạn có thể in ra dấu vết ngăn xếp của lỗi được không. – christopher

+1

Tên đầy đủ của 'this.getClass()' là gì và tệp trong tệp jar ở đâu? –

+0

Ngoại lệ trong chuỗi "AWT-EventQueue-0" java.lang.NullPointerException \t tại java.io.Reader. (Reader.java:61) \t tại java.io.InputStreamReader. (InputStreamReader.java:55) – Skogen

Trả lời

14

Giả sử IDE hoặc Maven hoặc quá trình tạo sẽ bao gồm nội dung của "tài nguyên" trong bình gốc, hãy thử tìm tại "/".

bReader = new BufferedReader(new InputStreamReader(
          this.getClass().getResourceAsStream("/" + fileName))); 

UPDATE:

Hãy chắc chắn rằng "tài nguyên" thư mục được cấu hình như một thư mục nguồn.

+0

Tôi đang sử dụng Eclipse và tôi nhận được NullPointer khi chạy nó trong Eclipse. Các .jar không có gì để làm với vấn đề, khác với thực tế là tôi đã có thể sử dụng ví dụ cho một tập tin, nếu không có kế hoạch để tạo ra một .jar cuối cùng. – Skogen

+0

Tôi có thể tìm tệp bằng cách sử dụng "/" nếu các tệp được kéo thả vào thư mục dự án, nhưng sau đó không thể tìm thấy tệp đó từ một tệp thực thi. – Skogen

+0

@Skogen: Xem cập nhật. – sgp15

-1

this.getClass().getResourceAsStream("resources/" + fileName) tải tệp từ classpath là new File("resources/" + fileName) tải tệp từ thư mục công việc của bạn (thư mục gốc của dự án trong nhật thực). Để thực hiện công việc trước đây, bạn cần thêm bình chứa resources dir vào đường dẫn lớp của bạn.

+0

Tệp mới ("tài nguyên /" + tên tệp) không hoạt động. – USer22999299

0

Đây có phải là dự án khung làm việc Spring không? Hãy thử:

BufferedReader bufferedReader = new BufferedReader(
      new InputStreamReader(new ClassPathResource("XML_Request.xml").getInputStream())); 

Resource để tải đang ngồi trong thư mục/chính thư mục/nguồn src:

Resource to load is sitting in the src/main/resources directory

0

Set "tài nguyên" thư mục như một thư mục tài nguyên. Hãy thử mã này:

bReader = new BufferedReader(new 
     InputStreamReader(getClass().getClassLoader().getResourceAsStream(fileName))) 
0

Không giống như getClassLoader().getResourceAsStream(filename), phiên bản bạn đang sử dụng getClass().getResourceAsStream(filename) sử dụng một đường dẫn tương đối đến vị trí của lớp, chứ không phải là gốc classpath. Bạn cần sử dụng đường dẫn tuyệt đối getClass().getResourceAsStream("/" + filename) hoặc sử dụng phiên bản ClassLoader.

Ngoài ra, hãy đảm bảo "tài nguyên" nằm trên đường dẫn lớp của bạn (nếu bạn đang sử dụng Maven, nó phải là "src/main/resources" tương ứng với tệp pom.xml của bạn). Nếu vậy, bạn không cần phải thực sự bao gồm "tài nguyên" trong tên tệp của bạn, bởi vì đó là gốc classpath.

Các vấn đề liên quan