Existe uma maneira em Java para construir uma instância de arquivo em um recurso recuperado de um jar através do carregador de classe?
Meu aplicativo usa alguns arquivos do jar (padrão) ou de um diretório do sistema de arquivos especificado em tempo de execução (entrada do usuário). Estou procurando uma maneira consistente de:
a) carregar esses arquivos como um fluxo
b) listar os arquivos no diretório definido pelo usuário ou no diretório no jar, respectivamente
Edit: Aparentemente, a abordagem ideal seria ficar longe do java.io.File completamente. Existe uma maneira de carregar um diretório do caminho de classe e listar seu conteúdo (arquivos / entidades nele contidos)?
fonte
InputStream
você obtém asgetResourceAsStream
paradas para recuperar os bytes do recurso após esse tamanho e, em vez disso, retorna 0 se estiver contido em um sistema de arquivos compactado como um jar. Você parece ser forçado a usargetResource
e carregar o arquivo independentemente disso nesse caso.read
método que decide quantos dados ler (eu não sabia disso). E parece que o arquivo inteiro é lido se o arquivo que está sendo lido estiver localizado em uma pasta regular. Se o arquivo estiver dentro de um jar porque foi empacotado, ele lerá apenas partes dele.InputStream
, se você quiser ler todo o recurso, faça um loop atéread
retornar -1.Eu tive o mesmo problema e pude usar o seguinte:
fonte
FileSystem
objeto e obter o resultadoPath
disso. Então você pode ler como de costume. (consulte stackoverflow.com/a/22605905/1876344 )Aqui está um pouco do código de um dos meus aplicativos ... Deixe-me saber se ele atende às suas necessidades. Você pode usar isso se souber o arquivo que deseja usar.
Espero que ajude.
fonte
toURI()
falha.Uma maneira confiável de construir uma instância de arquivo em um recurso recuperado de um jar é copiar o recurso como um fluxo para um arquivo temporário (o arquivo temporário será excluído quando a JVM sair):
fonte
Tente o seguinte:
Existem mais métodos disponíveis, por exemplo, consulte aqui: http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
fonte
Esta é uma opção: http://www.uofr.net/~greg/java/get-resource-listing.html
fonte