Listar arquivos .txt de um pacote java

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.

tenta dar uma lida nisto:

[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=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();        
    }    
}

t+ e boa sorte.

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

model.versao.scripts.base.dados

e no getResourceAsStream esta assim

/model/versao/scripts/base/dados/

esta errado?

Não entendi…

Você quer carregar um JAR que está dentro de outro JAR?
Ou dinâmicamente instanciar classes dentro de um JAR?

Para ambos, você deve utilizar ClassLoaders.
http://www.guj.com.br/articles/124

Espero ter ajudado.
Se não for isso, tente explicar melhor seu problema…

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 = “”;
}
}
}

    } catch (Exception e) {
        e.printStackTrace();
    }
}[/code]

[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

Thread.currentThread().getContextClassLoader().getResourceAsStream

e nada tambem, ja estou sem ideias do pq desse problema.

Qual é o pacote da classe que contem o método carregaDadosBase?
Da uma olhada:
http://www.java-tips.org/java-se-tips/java.io/read-a-text-file-from-a-jar.html

a classe que contem o metodo esta no seguinte pacote

model.versao

[quote]Qual é o pacote da classe que contem o método carregaDadosBase?
Da uma olhada:
http://www.java-tips.org/java-se-tips/java.io/read-a-text-file-from-a-jar.html[/quote]

entao ler o arquivo diretamente eu consigo, o problema é na hora de listar os arquivos do pacote, isso é o mais estranho.

Ja tentou colocar seu path sem a ‘/’ no fim?

String path = "/model/versao/scripts/base/dados";  

sim mesmo assim ele nao lista os arquivos do pacote

try { java.io.InputStream in = getClass().getResourceAsStream("arquivo.txt"); java.io.Reader reader = new java.io.InputStreamReader(in); java.io.BufferedReader leitor = new java.io.BufferedReader(reader); String dados=" "; while ((dados = leitor.readLine()) != null) { retorno = ""+dados; } } catch (Exception ioe) { result = ""; }