Estou carregando um arquivo de texto de dentro de um pacote em um JAR compilado do meu projeto Java. A estrutura de diretórios relevante é a seguinte:
/src/initialization/Lifepaths.txt
Meu código carrega um arquivo chamando Class::getResourceAsStream
para retornar a InputStream
.
public class Lifepaths {
public static void execute() {
System.out.println(Lifepaths.class.getClass().
getResourceAsStream("/initialization/Lifepaths.txt"));
}
private Lifepaths() {}
//This is temporary; will eventually be called from outside
public static void main(String[] args) {execute();}
}
A impressão sempre será impressa null
, não importa o que eu use. Não sei por que o que foi dito acima não funcionaria, então também tentei:
"/src/initialization/Lifepaths.txt"
"initialization/Lifepaths.txt"
"Lifepaths.txt"
Nenhum desses trabalhos. Eu li várias perguntas até agora sobre o tópico, mas nenhuma delas foi útil - geralmente, elas dizem apenas para carregar arquivos usando o caminho raiz, o que eu já estou fazendo. Isso, ou apenas carregue o arquivo do diretório atual (apenas carregue filename
), o que eu também tentei. O arquivo está sendo compilado no JAR no local apropriado com o nome apropriado.
Como eu resolvo isso?
Lifepaths.class
. Dito isto, por que getClassLoader()
permite que funcione? (Além disso, sinta-se livre para postar uma resposta!)
Lifepaths.getClass()
? Não existe esse método estático definido em Object ... #
getResource(String)
. BTW - Eu sempre tive problemas para fazer com que qualquer um trabalhasse em um static
contexto. O problema é basicamente que o carregador de classes obtido é o destinado às classes J2SE. Você precisa obter acesso ao carregador de classes de contexto destinado ao próprio aplicativo.