2013-09-26 10 views
24

La mia struttura di directory del progetto (in Eclipse):ClassLoader getResourceAsStream restituisce null

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

In Driver, ho il seguente codice:

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

Quando eseguo questo ottengo il seguente output della console:

input stream is null 

Perché? Ho posizionato myconfig.txt in una posizione errata? Sto usando l'API ClassLoader in modo errato? Qualcos'altro? Grazie in anticipo!

risposta

38

Se è nello stesso pacchetto di utilizzare

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

Il modo in cui lo avete

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

che sta cercando il file nella radice del classpath. Si potrebbe utilizzare

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

Le regole per la ricerca sono spiegate nel javadoc of ClassLoader#getResource(String) e javadoc of Class#getResource(String).

7

Se si sta lavorando con Maven, aggiungere le seguenti righe sotto il tag BUILD. Si ottiene questo errore quando si esegue la webapp sul server ma non vi è alcun riferimento alle risorse sul server.

Quindi, aggiungi questo nel tuo POM.xml e guarda la magia.

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

Buon divertimento !!!