Abrir Diretório Pastas no Java

Olá Galera estou tendo dificuldades em um negocio que estou fazendo em java.

eu tenho 3 pastas no meu diretório D:// com nomes diferentes e nessas 3 pastas exemplo teste1, teste2, teste3, no caso ficaria assim

D://teste1

D://teste2

D://teste3

e a função que eu quero fazer é a seguinte após a pessoa digitar o cpf do cliente na jTextField e clicar em procurar ele vai procurar nessa 3 pastas se tem essa pasta com mesmo número de cpf e se tiver ele vai abrir o diretório da pasta

eu tenho um jTextField e um botão “Procurar” na JFrame

já tentei usar o seguinte comando até que funciona só que no caso fica somente 1 pasta e preciso que faça a busca nas 3 pastas pra ver se tem, alguém poderia me ajudar?

Runtime.getRuntime() .exec(“explorer D:\teste1” + txtCPF.getText());

Não é mais facil deixar o CPF em um database e o nome da pasta junto desse cadastro?

Exemplo:

NOME   |    CPF     |      PASTA
------------------------------------
Fulano | 12345678-4 |    D:\\teste1

E pra abrir a pasta:

Desktop.getDesktop().open(new File("D:\\teste1"));
2 curtidas

Não entendi muito bem sua lógica poderia me explicar um pouco melhor, porque eu tenho mais de 50 mil pastas renomeadas com o cpf de cliente e cada pasta tem um produto especificado diferente que contem arquivos dos clientes dentro entendeu?

essa forma até funciona ele busca em todas pastas porém abre 3 pastas e queria que abrisse só a que fosse encontrada não sei se teria alguma forma de fazer isso

Runtime.getRuntime() .exec(“explorer D:\produto1-clientes” + txtCPF.getText());
Runtime.getRuntime() .exec(“explorer D:\produto2-clientes” + txtCPF.getText());
Runtime.getRuntime() .exec(“explorer D:\produto3-clientes” + txtCPF.getText());

testei sua função dessa forma

Desktop.getDesktop().open(new File("D:\\produto1-clientes"));
Desktop.getDesktop().open(new File("D:\\produto2-clientes"));
Desktop.getDesktop().open(new File("D:\\produto3-clientes"));

até que funciono mais ele só procura na primeira pasta se testar coloca um cpf da segunda pasta não executa

Eu que não to entendendo bem o que vc quer dizer, vamos lá:

Você quer saber se a pasta existe ou não? É isso?

pq nao executa? da erro?

bora lá, é o seguinte vamos supor que é uma borracharia ou oficina sei lá kkk, eu tenho 3 pastas assim renomeadas

  1. RODA
  2. FREIO
  3. PARA CHOQUE

e dentro dessas 3 pastas eu tenho subpastas criadas com com cpf do cliente em cada um com um serviço feito.
Exemplo:

PASTA RODA - 1
23232323232
22391314389

PASTA FREIO - 2
29323982983
29382983833

PASTA PARA CHOQUE - 3
1239621382
1837237283

então quando eu digitar um cpf lá no meu jTextField ele vai procurar o cpf que coloquei lá e vai procurar nessas 3 pastas e abrir ela se tiver entendeu?

as funções que fiz acima funciono mais não como eu quero preciso adaptar elas de alguma forma

Vai no diretório, imprime o nome de todas as pastas e verifica se tem a pasta que vc quer.

Se achar, abre a pasta.
Senão, vida que segue:

        File file = new File("C:\\Users\\Abner\\NodeProjects\\Whatsapp\\git\\WhatsappServer");
        String[] pastas = file.list((File current, String name) -> new File(current, name).isDirectory());

        for (String nomes : pastas) {
            System.out.println(nomes);
            
            if(nomes.equals("node_modules")){
                System.out.println("tem node_modules :D, abrindo pasta...");
            }
        }
1 curtida

Vê se essa classe te ajuda:

import java.awt.Desktop;
import java.io.File;

public class AbridorDePastas {

    private String pastaRaiz;

    public AbridorDePastas(String pastaRaiz) {
        this.pastaRaiz = pastaRaiz;
    }

    public void abrir(String pastaParaAbrir) {
        procurarAbrir(new File(pastaRaiz), pastaParaAbrir);
    }

    private void procurarAbrir(File pastaAtual, String pastaParaAbrir) {
        File[] pastasFilhas = pastaAtual.listFiles(file -> file.isDirectory());
        for (File pastaFilha : pastasFilhas) {
            if (pastaFilha.getName().equals(pastaParaAbrir)) {
                try {
                    Desktop.getDesktop().open(pastaFilha);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                procurarAbrir(pastaFilha, pastaParaAbrir);
            }
        }
    }
}

Exemplo de uso:

AbridorDePastas abridor = new AbridorDePastas("D:");
abridor.abrir("23232323232");
2 curtidas

no caso eu coloco meu diretório aonde das pasta? ou tenho que manter o arquivo jar dentro do diretório pra ele fazer a busca?

orochi tentei aqui mais não entendi muito bem como funciona ele até trouxe os nome da pasta pelo System.out.print porém não abriu

Pelo system out não vai abrir, usa o primeiro código que te passei.

Mas o código do staroski tá mais completo.

1 curtida

Não entendi o que você quis perguntar.

Você nos disse o seguinte:

eu tenho 3 pastas no meu diretório D:// com nomes diferentes e nessas 3 pastas exemplo teste1, teste2, teste3, no caso ficaria assim

a função que eu quero fazer é a seguinte após a pessoa digitar o cpf do cliente na jTextField e clicar em procurar ele vai procurar nessa 3 pastas se tem essa pasta com mesmo número de cpf e se tiver ele vai abrir o diretório da pasta

já tentei usar o seguinte comando até que funciona só que no caso fica somente 1 pasta e preciso que faça a busca nas 3 pastas pra ver se tem, alguém poderia me ajudar?

Pois bem, ao invés de fazer isso:

Runtime.getRuntime().exec("explorer D:\\teste1\\" + txtCPF.getText());

Você vai fazer isso:

new AbridorDePastas("D:").abrir(txtCPF.getText());

Você não vai informar as pastas teste1, teste2 e teste3 pro AbridorDePastas.
Basta informar a pasta raíz, no seu exemplo, o D:.
Ele já é esperto o bastante pra ir procurando recursivamente as pastas com o CPF informado.
:wink:

1 curtida

aah sim entendi gostei desse modo porém ainda não obtive sucesso coloquei assim mais não está abrindo

AbridorDePastas abridor = new AbridorDePastas(“D:\”);
abridor.abrir(txtCPF.getText());

Da uma depurada no código pra ver o que está acontecendo.

Provavelmente não tem nenhuma pasta ou subpasta cujo nome seja igual ao conteúdo do seu JTextField.

1 curtida

Essa instrução nem compila, tira essa \ do D:.

1 curtida

já tentei utilizar sem a \ e já tentei com duas \ e nada

Aqui funcionou

ezgif-3-23e4608cb739

public static void main(String[] args) {
    AbridorDePastas abridor = new AbridorDePastas("C:\\Users\\Abner\\NodeProjects\\Whatsapp\\git\\WhatsappServer"); //diretório
    abridor.abrir("input"); //pasta que eu quero que abra
}

Ué o meu está apresentando esses erro ao executar

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at sistemadocs.AbridorDePastas.procurarAbrir(AbridorDePastas.java:19)
at sistemadocs.AbridorDePastas.procurarAbrir(AbridorDePastas.java:27)
at sistemadocs.AbridorDePastas.procurarAbrir(AbridorDePastas.java:27)
at sistemadocs.AbridorDePastas.abrir(AbridorDePastas.java:14)
at sistemadocs.SistemaDocumentos$5.actionPerformed(SistemaDocumentos.java:128)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

mostra o diretório, se tá dando nullpointer é pq nao achou a pasta

1 curtida

meu diretório não está errado mais vou mandar, pelo seu código o primeiro está abrindo então não é o diretório né?