Estou tentando listar os arquivos txt que um determinado pacote da minha aplicação possui, mas nao estou conseguindo acessar esses arquivos, estou tentando consultar o pacote da seguinte maneira
File fDir = new File(getClass().getResource("/pacote/dados/").toURI());
mas ao executar essa linha me retorna a seguinte exception
java.lang.IllegalArgumentException: URI is not hierarchical
eu sei que para carregar arquivos txt de dentro do jar eu preciso utilizar o InputStream, mas como eu consigo listar os nomes dos arquivos?
Pois a minha aplicação carrega esses arquivos dinamico.
Entao ler um diretorio na maquina e listar os arquivos tranquilo, mas no meu caso tenho os arquivos txt dentro de um pacote no meu jar, por exemplo tenho varios arquivos…
2012-01-01.txt
2012-01-02.txt
…
esses arquivos sao colocados no projeto e compilados, quando executado eu tenho de carregar todos os arquivos de dentro do pacote da minha aplicação e verificar qual quero carregar, mas o problema esta em como verificar os arquivos de um pacote dentro do .jar
[quote=furacao123][quote=amunis999]tenta dar uma lida nisto:
Entao ler um diretorio na maquina e listar os arquivos tranquilo, mas no meu caso tenho os arquivos txt dentro de um pacote no meu jar, por exemplo tenho varios arquivos…
2012-01-01.txt
2012-01-02.txt
…
esses arquivos sao colocados no projeto e compilados, quando executado eu tenho de carregar todos os arquivos de dentro do pacote da minha aplicação e verificar qual quero carregar, mas o problema esta em como verificar os arquivos de um pacote dentro do .jar[/quote]
para ler arquivos dentro dos pacotes vc pode usar o InputStream, veja.
//arquivo.txt dentro do package betatest
este e um arquivo de teste dentro do package
//ler arquivo dentro do package
public class TesteArquivo {
private InputStream fi;
public TesteArquivo(){
fi = getClass().getClassLoader().getResourceAsStream("betatest/arquivo.txt");
Scanner s = new Scanner(fi);
while(s.hasNext()){
System.out.println(s.next()); //exibindo conteudo do arquivo
}
}
public static void main(String[] args){
new TesteArquivo();
}
}
Consegui carregar os inputsstream e ler os arquivos txt no pacote pelo netbeans, agora quando tenho executar a aplicação, pelo jar nao encontra os arquivos, como tenho de marcar o diretorio em getResourceAsStream?
Tenho um jar principal e utiliza outro jar, onde tenho a classe e os arquivos, o diretorio é esse
Vou explicar melhor, tenho um pacote model.versao.scripts.base.dados que contem varios arquivos .txt, pelo netbeans, consigo varrer todos os arquivos desse diretorio com o getResourceAsStream, mas quando eu compilo e executo a aplicação pelo .jar nao encontra os arquivos.
[code]private void carregaDadosBase() {
String path = “/model/versao/scripts/base/dados/”;
String linha = null;
String str = “”;
try {
logger.info(“Carregando dados base para primeira execução do sistema.”);
InputStream is = getClass().getResourceAsStream(path);
String[] arqs = ArquivoUtil.getNomeArquivosPacote(is);
System.out.println(“Numero arquivos encontrados: " + arqs.length);
BufferedReader leitor = null;
for (String file : arqs) {
logger.info(“Arquivo carregado: " + file);
is = getClass().getResourceAsStream(path + file);
leitor = new BufferedReader(new InputStreamReader(is));
while ((linha = leitor.readLine()) != null) {
str += linha;
if (linha.endsWith(”;”)) {
executeNativeQuery(str);
str = “”;
}
}
}
[code]public static String[] getNomeArquivosPacote(InputStream is) throws IOException {
List<String> lista = new ArrayList<String>();
BufferedReader leitor = new BufferedReader(new InputStreamReader(is));
String linha = null;
while ((linha = leitor.readLine()) != null) {
lista.add(linha);
}
leitor.close();
return lista.toArray(new String[lista.size()]);
}[/code]
no netbeans executando a aplicação funciona sem problemas, agora se eu executo pelo .jar nao funciona, o que esta errado?
A questao dos jars é o seguinte esses metodos estao em uma classe em determinado projeto, por exemplo projeto Model, estou fazendo os testes chamando uma main direto desse projeto, ok.
depois que funcionar pelo jar vou adicionar esse projeto em um outro projeto por exemplo ProjetoPrincipal adiciona o Model e utiliza os metodos de varredura de arquivos, nao cheguei ainda nessa parte porque nem diretamente no jar model esta funcionando, ja tentei com