Método de busca de arquivo não funciona! *** RESOLVIDO ***

2 respostas
R

Olá pessoal!! Estou tentando criar um método que procure por arquivos no computador de forma recursiva, mas ele simplesmente não funciona!!
Vou anexar o código aqui (que é relativamente curto) e em seguida faço os comentários...

// Por padrao o arquivo a ser procurado ainda nao foi encontrado no inicio da execucao do codigo
	static String resultado = "Arquivo nao encontrado!";

    // Procura pelo arquivo nomeArquivo dentro de um diretorio
    public static void procuraArquivo(File dir, String nomeArquivo) {
    	
    	if (dir.isDirectory()) {
    		
    		String[] children = dir.list();
	    	
	    	if(children != null) {

	    		for (int i = 0; i < children.length; i++) {
		    		if (children[i] == nomeArquivo){
		    			resultado = dir.getPath();
		    			break;
		    		}
		    		else
		    			// Chamada recursiva para percorrer os subdiretorios
		    			procuraArquivo(new File(dir, children[i]), nomeArquivo);
		    	}
	    	}
    	}
    	else if (dir.toString() == nomeArquivo) resultado = dir.getPath();
    }

Bom, a idéia básica é a seguinte: antes de chamar o método, eu crio um arquivo novo definido como o diretório raiz (em Linux é "\" e no Windows é o "C:\").
Como a raiz é um diretório, ele entra na condição inicial e cria uma lista com todos os objetos da raiz (arquivos e diretórios).
Daí, para cada elemento dessa lista, ele verifica se este elemento é ou não o arquivo procurado. Se não for, ele chama recursivamente o método.
Na recusrão, caso tenhamos um diretório, ele procura por todos os seus elementos novamente... Se for um arquivo ele apenas verifica se o nome do mesmo é o arquivo procurado a princípio.

A resposta é guardada numa variável estática da classe, externa ao método, e que guarda o diretório do arquivo encontrado.

Será que alguém sabeme dizer porque a resposta é sempre: "Arquivo nao encontrado!" ?? :cry: :cry: :cry:

Obrigado desde já e abraços a todos!! :D

2 Respostas

KWill

Detectei erro comum de principiantes java, para comparar objetos, é necessário usar equals(Object o). Usando ‘==’ se faz comparação fora do heap, que é onde a jvm guarda os objetos.

Esse erro é típico de programadores e ex-programadores VB, onde aquela linguagem dava diversas facilidades para o desenvolvedor.

Troque:

if (children[i] == nomeArquivo)

Por:

if (children[i].equals(nomeArquivo))

Inté.

R

Fala KWill!! Realmente eu estava comparando endereços de memória e não as Strings propriamente ditas… Mas então, mesmo arrumando isso ele continuou dando problema…
Estou desconfiado que o problema não é com este método, mas sim com a forma pela qual eu passo o parâmetro nomeArquivo.
Para obter este parâmetro eu trabalho com um socket em Java. Desta forma o usuário entra pelo browser com um endereço do tipo: 127.0.0.1:8080/arquivo.txt
E eu devo procurar por este arquivo no PC. O aplicativo Java fica rodando o socket aguardando a informação enviada via browser pelo usuário. Mas para obter o nome do arquivo, eu fiz uma pequena gambiarra… A primeira linha da resposta do servidor contém algumas informações, e entre elas o que o usuário envia após a “barra” no URL.
Daí eu dou um indexOf na String e pego o nome do arquivo… Já fiz vários “prints” para verificar o nome do arquivo e ele parece perfeito, mas ainda sim o erro continua…
A questão é se é possível obter o parâmetro enviado pelo usuário de alguma outra forma… :roll: :roll:

Criado 14 de junho de 2007
Ultima resposta 14 de jun. de 2007
Respostas 2
Participantes 2