Sistema de busca de arquivo por nome

gente… como eu posso fazer um sistema em que o programa recebe um nome numa String… então ele busca arquivos em certas pastas com o nome que está na String.
tipo…

private String search = "fulano1";

este “fulano1” é o nome de um arquivo numa certa pasta.
preciso abrii-lo para pegar certos dados nele.

como posso usar uma busca pra achar isso!? seria assim:

if(search.isExist()){
//codigo para achar o arquivo em certa pasta e subpasta.
}

Consulte a classe java.io.File, que representa nomes de arquivos e diretórios.
(Atenção: java.io.File não serve para ler ou escrever arquivos - isso é reservado para as classes java.io.FileInputStream, FileOutputStream, RandomAccessFile, FileReader ou FileWriter.
java.io.File serve para verificar se o arquivo existe, listar diretórios, remover arquivos etc. )

Ganhou uma barbada.

Método que busca por nomes em arquivos e pastas, tbm busca por fragmentos no nome do arquivo:


    public ArrayList buscarArquivoPorNome(String palavra, String caminhoInicial){
        ArrayList lista = new ArrayList();
        try{
            File arquivo = new File(caminhoInicial);
            lista =  buscar(arquivo, palavra, lista);        
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Caminho Inválido");
        }
        return lista;
    }

    public ArrayList buscar(File arquivo, String palavra, ArrayList lista) {
        if (arquivo.isDirectory()) {
            File[] subPastas = arquivo.listFiles();
            for (int i = 0; i < subPastas.length; i++) {
                lista = buscar(subPastas[i], palavra, lista);
                if (arquivo.getName().equalsIgnoreCase(palavra)) lista.add(arquivo.getAbsolutePath());
                else if (arquivo.getName().indexOf(palavra) > -1) lista.add(arquivo.getAbsolutePath());
            }
        }
        else if (arquivo.getName().equalsIgnoreCase(palavra)) lista.add(arquivo.getAbsolutePath());
        else if (arquivo.getName().indexOf(palavra) > -1) lista.add(arquivo.getAbsolutePath());
        return lista;
    }

ivo costa,
vlw pelo codigo…
no meu caso… eu não preciso procurar por subpasta… mas sim so pelo nome do arquivo.
o diretório ja fixo. falei daquela maneira para ganhar um pouco mais de conhecimento com o codigo que talvez possam me enviar, que neste caso foi o seu. 8)

so fiquei meio confuso em entender a “ArrayList lista” ali pro final…
A lista* irá me dizer aonde o arquivo está!? :?:

porque o que necessito é so achar o arquivo com tal nome e abri-lo.

É que se tu tiver vários arquivos com nomes parecidos tipo imagem1, imagem2, … e tu procurar por “imagem”, ele vai trazer no arrayList o caminho de todos os arquivos que contenham “imagem” no nome do arquivo.

Não resolve você usar o getName() da io.File e abrir ele com um Reader?

A solução do ivo é muito legal.

Abraço.

a procura do programa é exata.
:wink:

tipo que não terá procura por um nome que não existe ou por um nome que possa ter 2 parecidos.
a base da procura toma como referência um txt com a lista de nomes.
na lista.txt tem o nome exato de cada txt na subpasta. Então não há como haver 2 exemplos iguais. :wink:

mas entendo o que vc quer dizer e o que vc me colocou. Mas eu faço revisão com +2 pessoas, então não há problema com erros. rsrs.

[quote=ivo costa]Ganhou uma barbada.

Método que busca por nomes em arquivos e pastas, tbm busca por fragmentos no nome do arquivo:

[code]

public ArrayList buscarArquivoPorNome(String palavra, String caminhoInicial){
    ArrayList lista = new ArrayList();
    try{
        File arquivo = new File(caminhoInicial);
        lista =  buscar(arquivo, palavra, lista);        
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Caminho Inválido");
    }
    return lista;
}

public ArrayList buscar(File arquivo, String palavra, ArrayList lista) {
    if (arquivo.isDirectory()) {
        File[] subPastas = arquivo.listFiles();
        for (int i = 0; i < subPastas.length; i++) {
            lista = buscar(subPastas[i], palavra, lista);
            if (arquivo.getName().equalsIgnoreCase(palavra)) lista.add(arquivo.getAbsolutePath());
            else if (arquivo.getName().indexOf(palavra) > -1) lista.add(arquivo.getAbsolutePath());
        }
    }
    else if (arquivo.getName().equalsIgnoreCase(palavra)) lista.add(arquivo.getAbsolutePath());
    else if (arquivo.getName().indexOf(palavra) > -1) lista.add(arquivo.getAbsolutePath());
    return lista;
}

[/code][/quote]

Cara, acho que tu pode me ajudar, preciso listar pastas e suas subpastas de um local já mapeado, como faço isso. Usso esse código para listar as pastas, agora preciso listar suas subpastas:

public List<Diretorio> listaPasta() {
        List<Diretorio> listas = new ArrayList<Diretorio>();
        File file = new File(unidade);

        if (file.isDirectory()) {
            File[] afile = file.listFiles();

            for (File f : afile) {

                if (!f.isHidden()) {
                    if (f.isDirectory()) {
                        Diretorio diretorio = new Diretorio();
                        diretorio.setPasta(f.getName());
                        listas.add(diretorio);
                    }
                }
            }
        }

        return listas;
    }