2013-09-26 81 views
24

cấu trúc thư mục dự án của tôi (trong Eclipse):ClassLoader getResourceAsStream trả về null

MyProject/ 
    src/  --> "source directory" on Eclipse's classpath/buildpath 
     com.me.myapp 
      Driver 
      myconfig.txt 

Trong Driver, tôi có đoạn mã sau:

public class Driver { 
    public static void main(String[] args) { 
     InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt"); 
     if(is == null) 
      System.out.println("input stream is null"); 
     else 
      System.out.println("input stream is NOT null :-)"); 
    } 
} 

Khi tôi chạy này, tôi nhận được đầu ra giao diện điều khiển như sau:

input stream is null 

Tại sao? Tôi có đặt myconfig.txt ở vị trí không chính xác không? Tôi có đang sử dụng API ClassLoader không chính xác không? Thứ gì khác? Cảm ơn trước!

Trả lời

38

Nếu đó là trong cùng một gói sử dụng

InputStream is = Driver.class.getResourceAsStream("myconfig.txt"); 

Cách bạn có nó

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("myconfig.txt"); 

Nó tìm kiếm các tập tin trong thư mục gốc của classpath. Bạn có thể sử dụng

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("com/me/myapp/myconfig.txt"); 

Các quy tắc để tìm kiếm được giải thích trong javadoc of ClassLoader#getResource(String)javadoc of Class#getResource(String).

7

Nếu bạn đang làm việc với Maven, hãy thêm các dòng sau dưới BUILD thẻ. Bạn nhận được lỗi này khi bạn đang chạy webapp trên máy chủ nhưng không có tham chiếu đến các tài nguyên trên máy chủ.

Vì vậy, hãy thêm phần sau đây vào tệp POM.xml của bạn và xem sự kỳ diệu.

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
     <includes> 
      <include>fileName.txt</include> 
     </includes> 
    </resource> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
     <includes> 
      <include>fileName.wsdl</include> 
     </includes> 
    </resource> 
</resources> 

Hãy vui vẻ !!!