Java – Leia um arquivo da pasta de recursos
Em Java, podemos usar getResourceAsStream
ou getResource
para ler um arquivo ou vários arquivos de uma resources
pasta ou raiz do caminho de classe.
O método getResourceAsStream
retorna um InputStream
.
O getResource
o método retorna um URL
e normalmente o converte em um File
; Não funciona no arquivo JAR.
Arquivos na pasta de recursos
1.1 Revise os arquivos no src/main/resources
, mais tarde iremos acessar os arquivos e imprima o conteúdo do arquivo.
1.2 Por padrão, ferramentas de construção como Maven, Gradle ou a prática comum de Java copiará todos os arquivos de src/main/resources
para a raiz de target/classes
ou build/classes
. Portanto, quando tentamos ler um arquivo de src/main/resources
, lemos o arquivo da raiz do classpath do projeto.
1.3 Abaixo está uma estrutura de arquivo JAR. Normalmente, os arquivos na pasta resources
serão copiados para a raiz do classpath.
Obtenha um arquivo da pasta de recursos.
2.1 O exemplo a seguir demonstra o uso de getResourceAsStream
e getResource
métodos para ler um arquivo json/file1.json
da pasta resources
e imprimir o conteúdo do arquivo.
Observação
- O método
getResource
não está funcionando no arquivo JAR. - O
getResourceAsStream
funciona em qualquer lugar.
Saída
2.2 Agora, empacotamos o projeto em um arquivo JAR e o executamos; desta vez, getResource
falhará e retornará NoSuchFileException
ou InvalidPathException
. Não podemos ler os arquivos dentro do arquivo JAR por meio do URL do recurso.
Execute o arquivo JAR no Linux (Ubuntu), ele lança NoSuchFileException
.
Execute o arquivo JAR no Windows, ele lança InvalidPathException
.
PS Este exemplo usa o plugin Maven maven-jar-plugin
para criar o arquivo JAR.
Obtenha um arquivo da pasta de recursos – Teste de Unidade
3.1 Colocamos os recursos de teste na pasta src/test/resources
para testes de unidade. Normalmente, os arquivos em recursos de teste serão copiados para a pasta target/test-classes
.
3.2 Funciona da mesma forma que lemos o arquivo de src/main/resources
. Usamos os mesmos métodos getResourceAsStream
e getResource
para ler o arquivo de src/test/resources
.
Saída
Obtenha todos os arquivos de uma pasta de recursos. (Ambiente NÃO JAR)
Se não soubermos o nome do arquivo exato e quisermos ler todos os arquivos, incluindo arquivos de subpasta de uma pasta de recursos, podemos usar o NIO Files.walk
para acessar e ler facilmente os arquivos.
4.1 O exemplo abaixo usa Files.walk
para ler todos os arquivos de uma pasta src/main/resources/json
:
Saída
4.2 No entanto, o Files.walk
no exemplo 4.1 não pode acessar os arquivos no arquivo JAR diretamente, tente executar o exemplo 4.1 em um ambiente JAR, e ele lança FileSystemNotFoundException
.
Obtém todos os arquivos de uma pasta de recursos. (Versão JAR)
5.1 Este exemplo mostra como Files.walk
uma pasta dentro de um arquivo JAR via FileSystems
e URI jar:file:xxx.jar
.
A ideia é:
- Arquivo percorre a pasta dentro de um arquivo JAR usando
FileSystems
, e obter todos os nomes de arquivos, consultegetPathsFromResourceJAR()
- Faça um loop de todos os nomes de arquivos, acesse e imprima cada arquivo como no exemplo 2.1, consulte
getFileFromResourceAsStream()
.
Saída
Baixe o código-fonte
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – Sintaxe e formato de um URI
- Maven – Criar arquivo JAR
- Provedor de sistema de arquivos Zip
- exemplos de arquivos Java.walk
- Java – Obtenha o caminho de um arquivo JAR em execução
mkyong
Fundador da Mkyong.com, adora Java e coisas de código aberto. Siga-o no Twitter. Se você gosta de meus tutoriais, considere fazer uma doação para essas instituições de caridade.