Tengo un archivo de recursos que necesito para la carga en tiempo de ejecución ... es en src/main/resources
He cargado correctamente el archivo a un InputStream usando:
LoadSAC.class.getClassLoader().getResourceAsStream("someFile.txt");
LoadSAC
es el nombre de la clase ...
Sin embargo, el PMD se queja de esto sugiere que el uso
Thread.currentThread().getContextClassLoader().getResource(...)
He intentado numerosas combinaciones y nunca puedo obtener el archivo que se encuentra ... ¿Alguna idea ... Me han controlado un número de búsquedas con un montón de sugerencias pero ninguno parece funcionar ...
Alguna idea ?
Si someFile.txt
está en la misma carpeta que LoadSAC.java
, se puede hacer:
InputStream is = LoadSAC.class.getResourceAsStream("someFile.txt");
Si someFile.txt
se encuentra en una subcarpeta subdir
, puede hacerlo:
InputStream is = LoadSAC.class.getResourceAsStream("subdir/someFile.txt");
Si su método en el LoadSAC.java
no es estática, se puede sustituir LoadSAC.class.getResourceAsStream...
porgetClass().getResourceAsStream...
Tenga cuidado al compilar con ant
o maven
, por defecto, sólo el .java
archivo se copian como .class
archivos en el directorio de construcción.
Usted tiene que escribir algunas reglas para incluir someFile.txt
en la final jar
.
En su resource
directorio, puede añadir un poco de clase de ayuda como esto:
import java.io.InputStream;
import java.net.URL;
import javax.activation.DataSource;
import javax.activation.URLDataSource;
public abstract class ResourceHelper {
public static URL getURL(String name) {
return ResourceHelper.class.getResource(name);
}
public static InputStream getInputStream(String name) {
return ResourceHelper.class.getResourceAsStream(name);
}
public static DataSource getDataSource(String name) {
return new URLDataSource(getURL(name));
}
}
En LoadSAC.java
apenas llamada:
InputStream is = ResourceHelper.getInputStream("someFile.txt");