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


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

Mentre usiamo Chrome, dopo aver scaricato i file, possiamo scegliere "Mostra nella cartella" per aprire esplora file ed evidenziare il file scaricato.

Come utilizzare java Desktop API per farlo? O c'è qualche altra API in java in grado di realizzare questa azione?

Author: Charles Wu, 2011-09-09

7 answers

Uso: Runtime.getRuntime().exec("explorer.exe /select," + path);

Funziona anche se c'è uno spazio nel PATH.

 28
Author: Stone, 2015-08-07 08:46:10

L'API Desktop non supporta questo. Si sta andando ad avere per utilizzare ProcessBuilder (o in alternativa Runtime.exec()) per eseguire explorer.exe esplicitamente con le opzioni desiderate. Questo funzionerà solo su Windows, se vuoi eseguirlo su un altro sistema operativo dovrai comunque utilizzare l'API Desktop.

Process p = new ProcessBuilder("explorer.exe", "/select,C:\\directory\\selectedFile").start();
 27
Author: krock, 2011-09-10 04:19:40

MODIFICA:

Non è possibile evidenziare un file specifico con java Desktop API.

RISPOSTA ALLA DOMANDA ORIGINALE:

L'API Desktop ti permetterà di farlo usando questo snippet,

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

La documentazione per il codice usato sopra è a questi link, http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html e http://docs.oracle.com/javase/7/docs/api/java/io/File.html

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

In alternativa è possibile utilizzare la nuova java Path API per creare il percorso richiesto e quindi richiamare il metodo che restituisce l'oggetto File corrispondente.

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

 25
Author: Zixradoom, 2014-04-24 14:26:54

Possiamo aprire un percorso specifico dalla riga di comando con:

start C:/ProgramData

Ci sono due modi in java è possibile utilizzare per aprire Windows Explorer con percorso specifico:

  1. Usa 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
Author: Mohit, 2016-09-12 07:19:13

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
Author: Aravind Sharma, 2016-04-24 04:54:04

Ecco la versione più breve di sopra.

    String onlyPath = "D:\\GAME   OF  Thrones";
    String completeCmd = "explorer.exe /select," + onlyPath;
    new ProcessBuilder(("explorer.exe " + completeCmd).split(" ")).start();
 1
Author: Martin Koukal, 2017-05-04 11:49:06

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 di Windows Explorer (Explorer.exe)

Utilizzo di Windows CLI:

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

Lo stesso nel codice sorgente Java : Qui variabile filePaths è un ArrayList<String> e contiene una cartella tutti i file percorso.

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!

 0
Author: ArifMustafa, 2017-11-09 10:10:44