Eu tenho uma pasta / pacote de recursos na raiz do meu projeto, "não" quero carregar um determinado arquivo. Se eu quisesse carregar um determinado arquivo, usaria class.getResourceAsStream e ficaria bem !! Na verdade, o que eu quero fazer é carregar uma "Pasta" dentro da pasta de recursos, fazer um loop nos arquivos dentro dessa pasta e obter um fluxo para cada arquivo e ler o conteúdo ... Suponha que os nomes dos arquivos não sejam determinados antes do tempo de execução ... O que devo fazer? Existe uma maneira de obter uma lista dos arquivos dentro de uma pasta no seu arquivo jar? Observe que o arquivo Jar com os recursos é o mesmo arquivo jar a partir do qual o código está sendo executado ...
Desde já, obrigado...
Respostas:
Finalmente, encontrei a solução:
O segundo bloco funciona quando você executa o aplicativo no IDE (não com o arquivo jar). Você pode removê-lo se não gostar disso.
fonte
Tente o seguinte.
Crie o caminho do recurso
"<PathRelativeToThisClassFile>/<ResourceDirectory>"
Por exemplo, se o caminho da sua classe for com.abc.package.MyClass e seus arquivos de pesquisa estiverem em src / com / abc / package / resources /:Você também pode usar
fonte
File
classe. Este código não funciona com recursos dentro de um arquivo JAR. Período.Eu sei que isso é há muitos anos. Mas apenas para outras pessoas se deparam com esse tópico. O que você pode fazer é usar o
getResourceAsStream()
método com o caminho do diretório e o fluxo de entrada terá todos os nomes de arquivos desse diretório. Depois disso, você pode concat o caminho do diretório com cada nome de arquivo e chamar getResourceAsStream para cada arquivo em um loop.fonte
Eu tive o mesmo problema em mãos enquanto tentava carregar algumas configurações do hadoop a partir de recursos empacotados no jar ... no IDE e no jar (versão de lançamento).
Eu achei
java.nio.file.DirectoryStream
que funcionava melhor para iterar o conteúdo do diretório tanto no sistema de arquivos local quanto no jar.fonte
O código a seguir retorna a "pasta" desejada como Path, independentemente de estar dentro de um jar ou não.
Requer java 7+.
fonte
folder
) parece ser ignorado ao criar o sistema de arquivos. PortantogetPath
, não retornafolder/path/to/...
, mas apenaspath/to/...
.Outra solução, você pode fazer isso usando
ResourceLoader
assim:fonte
Simples ... use OSGi. No OSGi, você pode iterar as entradas do seu Bundle com findEntries e findPaths.
fonte
Dentro do meu arquivo jar, eu tinha uma pasta chamada Upload, essa pasta tinha outros três arquivos de texto e precisava ter exatamente a mesma pasta e arquivos fora do arquivo jar, usei o código abaixo:
fonte
Como as outras respostas apontam, quando os recursos estão dentro de um arquivo jar, as coisas ficam realmente feias. No nosso caso, esta solução:
https://stackoverflow.com/a/13227570/516188
funciona muito bem nos testes (já que, quando os testes são executados, o código não é compactado em um arquivo jar), mas não funciona quando o aplicativo realmente é executado normalmente. Então, o que eu fiz foi ... Codifico a lista dos arquivos no aplicativo, mas tenho um teste que lê a lista real do disco (pode fazê-lo, pois funciona nos testes) e falha se a lista real não corresponde à lista que o aplicativo retorna.
Dessa forma, tenho um código simples no meu aplicativo (sem truques) e tenho certeza de que não esqueci de adicionar uma nova entrada na lista, graças ao teste.
fonte
Este link mostra como.
A mágica é o método getResourceAsStream ():
fonte