2013-09-26 19 views
24

Moje struktury katalogu projektu (w Eclipse):ClassLoader getResourceAsStream zwraca null

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

W Driver, mam następujący kod:

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 :-)"); 
    } 
} 

Gdy uruchomię to uzyskać następujące wyjścia konsoli:

input stream is null 

Dlaczego? Czy umieściłem myconfig.txt w niewłaściwym miejscu? Czy używam API ClassLoader niepoprawnie? Coś innego? Z góry dziękuję!

Odpowiedz

38

Jeśli jest w tym samym opakowaniu używać

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

Sposób masz go

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

on szuka pliku w katalogu głównym na ścieżce klasy. Można użyć

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

Przepisy na poszukiwania są wyjaśnione w javadoc of ClassLoader#getResource(String) i javadoc of Class#getResource(String).

7

Jeśli pracujesz z Maven, należy dodać następujące linie pod BUILD znacznika. Ten błąd występuje, gdy uruchamiasz aplikację webapp na serwerze, ale nie ma odniesienia do zasobów na serwerze.

Dodaj to do swojego POM.xml i zobacz magię.

<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> 

Miłej zabawy. !!!

Powiązane problemy