it-swarm.it

Come utilizzare Java per aprire Esplora file di Windows ed evidenziare il file specificato?

Ora sto usando Java Desktop API per manipolare Esplora file. So come aprire il file Explorer ma non so come aprirlo ed evidenziare il file specificato.

Mentre utilizziamo Chrome, dopo aver scaricato i file, possiamo scegliere "mostra nella cartella" per aprire il file Explorer ed evidenziare il file scaricato.

Come usare Java API desktop per farlo? O c'è qualche altra API in Java può realizzare questa azione?

37
Charles Wu

Usa: Runtime.getRuntime().exec("Explorer.exe /select," + path);

Questo funziona anche se c'è uno spazio nel PATH.

40
Stone

L'API desktop non supporta questo. Dovrai utilizzare ProcessBuilder (o in alternativa Runtime.exec() ) per eseguire esplicitamente Explorer.exe con il opzioni desiderate . Funzionerà solo su Windows, tuttavia, se si desidera eseguirlo su un altro sistema operativo, sarà comunque necessario utilizzare l'API desktop.

Process p = new ProcessBuilder("Explorer.exe", "/select,C:\\directory\\selectedFile").start();
27
krock

MODIFICARE:

A partire da Java 9 ora esiste un metodo nell'API desktop per selezionare il file

desktop.browseFileDirectory(<file>)

MODIFICARE:

Non è possibile evidenziare un file specifico con l'API desktop Java Desktop.

RISPOSTA ALLA DOMANDA ORIGINALE:

L'API desktop ti consentirà di farlo utilizzando questo snippet,

File file = new File ("c:\<directory>");
Desktop desktop = Desktop.getDesktop();
desktop.open(file);

La documentazione per il codice usato sopra è disponibile a questi link, http://docs.Oracle.com/javase/10/docs/api/Java/awt/Desktop.html e http : //docs.Oracle.com/javase/10/docs/api/Java/io/File.html

Su un computer Windows questo aprirà il file Explorer predefinito e su altri sistemi aprirà rispettivamente i loro explorer predefiniti.

In alternativa, è possibile utilizzare il nuovo Java Path API per creare il percorso richiesto e quindi invocare il metodo che restituisce l'oggetto File corrispondente.

Per brevità ho escluso il codice di controllo per accertarmi che esistano gli oggetti Desktop e File.

27
Zixradoom

Possiamo aprire un percorso specifico dalla riga di comando con:

start C:/ProgramData

Ci sono due modi in Java che puoi usare per aprire Windows Explorer con un percorso specifico:

  1. Utilizzare la classe Process (come già risposto) ma con il comando start

    try {
        Process builder = Runtime.getRuntime().exec("cmd /c start C:/ProgramData");
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  2. Usa la classe Desktop

    try {
        Desktop.getDesktop().open(new File("C:/ProgramData"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    
3
Iamat8

Usa sempre "\" invece di "/", altrimenti si aprirà solo Explorer, per saperne di più leggi questo --- Opzioni della riga di comando che puoi usare per aprire la GUI Windows Explorer (Explorer.exe)

Utilizzando l'interfaccia della riga di comando di Windows:

C:\Users\Md Arif Mustafa>Explorer.exe /select, "C:\Users\Md Arif Mustafa\Music\Aafreen-Himesh.mp3"

Lo stesso in Java Java: qui variabile filePaths è un ArrayList<String> e contiene una cartella con tutti i percorsi dei file.

try {
    Process proc = Runtime.getRuntime().exec("Explorer.exe /select, " + filePaths.get(i).replaceAll("/", "\\\\"));
    proc.waitFor();
} catch (IOException | InterruptedException ex ) {
    ex.printStackTrace();
}

Ha funzionato per me e spero che ti aiuti!

1
ArifMustafa

Ecco la versione più breve di cui sopra.

    String onlyPath = "D:\\GAME   OF  Thrones";
    String completeCmd = "Explorer.exe /select," + onlyPath;
    new ProcessBuilder(("Explorer.exe " + completeCmd).split(" ")).start();
1
Martin Koukal

Funziona anche se il nome del file/cartella ha più spazi tra le parole.

    //In this example there are 3 spaces between "GAME" and "OF" and 2 spaces between "OF" and "Thrones"
    String onlyPath = "D:\\GAME   OF  Thrones";
    String selectPath = "/select," + onlyPath;        

    //START: Strip one SPACE among consecutive spaces
    LinkedList<String> list = new LinkedList<>();
    StringBuilder sb = new StringBuilder();
    boolean flag = true;

    for (int i = 0; i < selectPath.length(); i++) {
        if (i == 0) {
            sb.append(selectPath.charAt(i));
            continue;
        }

        if (selectPath.charAt(i) == ' ' && flag) {
            list.add(sb.toString());
            sb.setLength(0);
            flag = false;
            continue;
        }

        if (!flag && selectPath.charAt(i) != ' ') {
            flag = true;
        }

        sb.append(selectPath.charAt(i));
    }

    list.add(sb.toString());

    list.addFirst("Explorer.exe");
    //END: Strip one SPACE among consecutive spaces

    //Output List
    for (String s : list) {
        System.out.println("string:"+s);
    }
    /*output of above loop

    string:Explorer.exe
    string:/select,D:\GAME
    string:  OF
    string: Thrones

    */

    //Open in Explorer and Highlight
    Process p = new ProcessBuilder(list).start();
1
Aravind Sharma