Abrir Diretório Pastas no Java

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é?

Eu mandei abrir a pasta input, tá comentado ali.

O diretório que tem as pastas é esse WhatsappServer e a pasta que eu queria abrir era a input

1 curtida

Sim eu fiz um teste ali como se pode ver, peguei o disco C: agora e mandei abrir a pasta Intel que tem ali porém sem resultado viu ali os diretórios estão batendo normal

você alterou algo na classe AbridorDePastas?

image

É… Printei aqui e na pasta C:/ só mostra as pastas ocultas.
Agora tem que ver isso com o @staroski.

Só consegui entrando em uma sub pasta… Tipo: C:\\php


Tenta assim:

 String nome_pasta = "Intel";
        String dir = "C:\\";
        
        File file = new File(dir);
        String[] pastas = file.list((File current, String name) -> new File(current, name).isDirectory());

        for (String nomes : pastas) {
            System.out.println(nomes);

            if (nomes.equals(nome_pasta)) {
                try {
                    System.out.println("tem a Intel :D, abrindo pasta...");
                    Desktop.getDesktop().open(new File(dir + nome_pasta));
                } catch (IOException ex) {
                    Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

Aqui abriu

1 curtida

Um método mais bonitinho:

public static void main(String[] args) {
    boolean status = listFolders("C:\\", "Intel");
    if(status){
        System.out.println("A pasta existe, estamos abrindo...");
    } else {
        System.out.println("A pasta não existe");
    }
}

private static boolean listFolders(String dirname, String subdir) {
    boolean status = false;
    File file = new File(dirname);
    File[] pastas = file.listFiles((File current, String name) -> new File(current, name).isDirectory());

    for (File nomes : pastas) {
        if (nomes.getName().equals(subdir)) {
            try {
                Desktop.getDesktop().open(new File(nomes.getAbsolutePath()));
                return true;
            } catch (Exception ex) {
                Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    return status;
}
1 curtida

O listFiles em cima de alguma pasta oculta deve estar retornando null, provavelmente por causa de permissões.

Aqui não peguei esse problema pois o atalho do meu eclipse tá configurado pra executar como “Administrador”.

É só por um teste:

private void procurarAbrir(File pastaAtual, String pastaParaAbrir) {
    File[] pastasFilhas = pastaAtual.listFiles((FileFilter) file -> file.isDirectory());
    if (pastasFilhas == null) {
        return; // chega de NullPointerException
    }
    for (File pastaFilha : pastasFilhas) {
        if (pastaFilha.getName().equalsIgnoreCase(pastaParaAbrir)) {
            try {
                Desktop.getDesktop().open(pastaFilha);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            procurarAbrir(pastaFilha, pastaParaAbrir);
        }
    }
}
2 curtidas

@staroski

staroski agora funciono certinho, porém está executando várias pasta iguais ao mesmo tempo como se fosse um loop coloco pra executa e abre várias até eu finalizar o java to tentando descobrir oque seja

tenho uma dúvida também sabe me dizer se tenho como utilizar isso para um pasta compartilhada na rede com senha? ao invés de usar o disco D://

orochi até funciono porém ele não faz as busca na subpastas

Você deve ter várias pastas com o mesmo nome, ou melhor, CPF, não é isso?

Então, a classe File serve apenas para representar arquivos e diretórios físicos do seu sistema operacional.

Por mais que o windows explorer renderize uma pasta remota como se fosse uma pasta local, do ponto de vista do Java isso não é um File.

Vais ter que usar alguma API de terceiros pra fazer isso, já ouvi falar num tal de jCIFS mas nunca utilizei.

pior que não eu fiz um teste normal aqui em uma pasta e continuo abrindo o botão fica travado como se eu tivesse pressionando ele

Aaaa sim entendi obg

Tem alguma pasta com links simbólicos que apontam pra pasta mais externa?

1 curtida

Já consegui resolver muito obrigado pela ajuda :grinning: