Erro na procura de um arquivo dentro de um diretório?

2 respostas Resolvido
programaçãojavaexception
Lucas_Luan

Galera estou tentando procurar um arquivo dentro de diretórios mas tá dando erro , alguém sabe o que estou fazendo de errado ?

import java.io.File;
import java.util.Scanner;


public class ProcuraArquivoSequencial {
    private static boolean achou;
    
    public static void procura(String pasta, String arquivo){
        achou = false;
        procura(new File(pasta), arquivo);
    }
private static void  procura(File f, String arquivo){
    if(achou){
        return;
        }
    if(f.isFile() && f.getName().equalsIgnoreCase(arquivo)){
        System.out.println("Achei: "+f.getAbsolutePath());
        achou = true;
        return;
    }
    if(f.isDirectory()){
        for (File sub : f.listFiles()){
            procura(sub, arquivo);
        }
    }
}

public static void main(String[] args){
    Scanner teclado = new Scanner(System.in);
    
    System.out.println("Digite a pasta de Origem");
    String pasta = teclado.nextLine();
    System.out.println("Digite o nome do Arquivo");
    String arquivo = teclado.nextLine();
    System.out.println("Procurando Arqvuivo....");
    
    procura(pasta, arquivo);
    System.out.println("Fim");
   
}

}

2 Respostas

D
Solucao aceita

Adicionei uma verificação num if e passou a funcionar:

if(f.isDirectory() && (f.listFiles() != null)){
	for (File sub : f.listFiles()){
		procura(sub, arquivo);
	}
}

teste o código passando um Caminho como “C:” ou “C:\Users\User\Documents”: e o nome do Arquivo completo como “Harpa-187 Mais Perto Meu Deus de Ti.txt” (com a extensão do arquivo):

import java.io.File;
import java.util.Scanner;

public class ProcuraArquivoSequencial {
	private static boolean achou;

	public static void procura(String pasta, String arquivo){
		achou = false;
		procura(new File(pasta), arquivo);
	}
	private static void procura(File f, String arquivo){
		if(achou){
			return;
		}
		System.out.println("Arquivo Atual: "+f.getAbsolutePath());
		if(f.isFile() && f.getName().equalsIgnoreCase(arquivo)){
			System.out.println("Achei: "+f.getAbsolutePath());
			achou = true;
			return;
		}
		if(f.isDirectory() && (f.listFiles() != null)){
			for (File sub : f.listFiles()){
				procura(sub, arquivo);
			}
		}
	}

	public static void main(String[] args){
		Scanner teclado = new Scanner(System.in);

		System.out.println("Digite a pasta de Origem");
		String pasta = teclado.nextLine();
		System.out.println("Digite o nome do Arquivo");
		String arquivo = teclado.nextLine();
		System.out.println("Procurando Arqvuivo....");

		procura(pasta, arquivo);
		System.out.println("Fim");
	}

}
Lucas_Luan

Vlw mano funcionou perfeitamente.

Criado 10 de abril de 2017
Ultima resposta 10 de abr. de 2017
Respostas 2
Participantes 2