Meu projeto tem a seguinte estrutura:
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
Eu tenho um arquivo /src/test/resources/test.csv
e quero carregá-lo em um teste de unidade no/src/test/java/MyTest.java
Eu tenho esse código que não funcionou. Ele reclama "Não existe esse arquivo ou diretório".
BufferedReader br = new BufferedReader (new FileReader(test.csv))
Eu também tentei isso
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
Isso também não funciona. Retorna null
. Estou usando o Maven para criar meu projeto.
this.getClass().getResource("/test.csv")
Respostas:
Tente o seguinte:
Se o exposto acima não funcionar, vários projetos foram adicionados à seguinte classe: 1 (código aqui ). 2
ClassLoaderUtil
Aqui estão alguns exemplos de como essa classe é usada:
Notas
fonte
Object.class.getClassLoader();
, a partir de um contexto estático que não fez trabalho - essa sugestão faz - bem, quase, ele injeta%20
para espaços que me dá umaFileNotFoundException
Experimentar:
O IIRC
getResourceAsStream()
por padrão é relativo ao pacote da classe.Como o @Terran observou, não se esqueça de adicionar o
/
no início do nome do arquivofonte
String
stackoverflow.com/a/35446009/544045Aqui está uma solução rápida com o uso do Goiaba :
Uso:
fonte
Experimente os códigos de fluxo no projeto Spring
Ou no projeto não primavera
fonte
Projeto não primavera:
Para projetos de primavera, você também pode usar um código de linha para obter qualquer arquivo na pasta de recursos:
fonte
Agora estou ilustrando o código-fonte para ler uma fonte do diretório de recursos criados pelo maven,
Funcionou para mim e espero que todo o código-fonte também ajude você, Divirta-se!
fonte
Para java após 1,7
fonte
Se você usar o ClassLoader de contexto para encontrar um recurso, definitivamente custará o desempenho do aplicativo.
fonte
Importe o seguinte:
O método a seguir retorna um arquivo em um ArrayList of Strings:
fonte
Eu enfrentei o mesmo problema .
O arquivo não foi encontrado por um carregador de classes, o que significa que não foi compactado no artefato (jar). Você precisa construir o projeto . Por exemplo, com maven:
Portanto, os arquivos adicionados à pasta de recursos entrarão no maven build e ficarão disponíveis para o aplicativo.
Gostaria de manter minha resposta: ele não explica como ler um arquivo (outras respostas explicam isso), responde por que
InputStream
ouresource
foi nulo . Resposta semelhante está aqui .fonte
getResource () estava funcionando bem apenas com os arquivos de recursos
src/main/resources
. Para obter um arquivo que esteja no caminho que nãosrc/main/resources
sejasrc/test/java
o necessário, é necessário criá-lo exclusivamente.o exemplo a seguir pode ajudá-lo
fonte
O código funciona quando não está sendo executado o jar do Maven-build, por exemplo, quando está sendo executado no seu IDE? Nesse caso, verifique se o arquivo está realmente incluído no jar. A pasta de recursos deve ser incluída no arquivo pom, em
<build><resources>
.fonte
A classe a seguir pode ser usada para carregar a
resource
partir declasspath
e também receber uma mensagem de erro apropriada, caso haja um problema com o dadofilePath
.fonte
Resolvi esse problema adicionando uma
/scr/main/resources
pasta ao meuJava Build Path
fonte
Eu consegui trabalhar tanto no jar em execução quanto no IDE escrevendo como
fonte
fonte
Você pode usar o com.google.common.io.Resources.getResource para ler o URL do arquivo e, em seguida, obter o conteúdo do arquivo usando java.nio.file.Files para ler o conteúdo do arquivo.
fonte
Consigo fazê-lo funcionar sem qualquer referência a "class" ou "ClassLoader".
Digamos que tenhamos três cenários com o local do arquivo 'example.file' e seu diretório de trabalho (onde o aplicativo é executado) é home / mydocuments / program / projects / myapp:
a) Uma subpasta descendente do diretório de trabalho: myapp / res / files / example.file
b) Uma subpasta não descendente do diretório de trabalho: projects / files / example.file
b2) Outra subpasta não descendente do diretório de trabalho: program / files / example.file
c) Uma pasta raiz: home / mydocuments / files / example.file (Linux; no Windows, substitua home / por C :)
1) Pegue o caminho certo: a)
String path = "res/files/example.file";
b)String path = "../projects/files/example.file"
b2)String path = "../../program/files/example.file"
c)String path = "/home/mydocuments/files/example.file"
Basicamente, se for uma pasta raiz, inicie o nome do caminho com uma barra inicial. Se for uma subpasta, nenhuma barra deve estar antes do nome do caminho. Se a subpasta não for descendente do diretório de trabalho, você deverá fazer o cd usando "../". Isso diz ao sistema para subir uma pasta.
2) Crie um objeto File passando o caminho certo:
3) Agora você está pronto para ir:
fonte