Comment utiliser le code java pour ouvrir l'Explorateur de fichiers Windows et mettre en surbrillance le fichier spécifié?

J'utilise maintenant java Desktop API pour manipuler l'Explorateur de fichiers. Je sais comment ouvrir l'Explorateur de fichiers mais je ne sais pas comment l'ouvrir et mettre en surbrillance le fichier spécifié.

Comme nous en utilisant le Chrome, après le téléchargement des fichiers, nous pouvons choisir "afficher dans le dossier" pour ouvrir l'Explorateur de fichiers et mettre en évidence le fichier téléchargé.

Comment utiliser java Desktop API pour le faire? Ou y at-il une autre API en java peut réaliser cette action?

30
demandé sur Charles Wu 2011-09-09 10:36:57

7 réponses

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

Cela fonctionne aussi si il y a un espace dans le PATH.

28
répondu Stone 2015-08-07 08:46:10

L'API de bureau ne prend pas en charge cela. Vous allez avoir à utiliser ProcessBuilder (ou sinon Runtime.exec()) pour exécuter l'explorateur.exe explicitement , avec les options que vous souhaitez. Cela ne fonctionnera que sur windows, si vous voulez l'exécuter sur un autre système d'exploitation, vous devrez utiliser l'API de bureau de toute façon.

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

Modifier:

Vous ne pouvez pas mettre en surbrillance un fichier spécifique avec l'API java Desktop.

RÉPONSE À LA QUESTION INITIALE:

L'API de bureau vous permettra de le faire en utilisant cet extrait,

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

La documentation pour le code utilisé ci-dessus est à ces liens, http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html et http://docs.oracle.com/javase/7/docs/api/java/io/File.html

Sur un ordinateur Windows, cela ouvrira le fichier par défaut explorer et sur d'autres systèmes, il ouvrira respectivement leurs explorateurs par défaut.

Vous pouvez également utiliser la nouvelle API java Path pour construire le chemin requis, puis appeler la méthode qui renvoie l'objet File correspondant.

Par souci de concision, j'ai exclu le code de vérification pour m'assurer que les objets de bureau et de fichier existent.

25
répondu Zixradoom 2014-04-24 14:26:54

Nous pouvons ouvrir un chemin spécifique à partir de la ligne de commande avec:

start C:/ProgramData

En java, vous pouvez utiliser deux façons d'ouvrir l'Explorateur windows avec un chemin spécifique:

  1. Utilisez la classe Process (comme déjà répondu) mais avec la commande start

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

    try {
        Desktop.getDesktop().open(new File("C:/ProgramData"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    
3
répondu Mohit 2016-09-12 07:19:13

Cela fonctionne même si le nom du fichier / dossier a plusieurs espaces entre les mots.

    //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
répondu Aravind Sharma 2016-04-24 04:54:04

Voici une version plus courte de ci-dessus.

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

Utilisez toujours le " \ "au lieu de"/", sinon seul l'Explorateur s'ouvrira, avant de lire ceci - commutateurs de ligne de commande que vous pouvez utiliser pour ouvrir L'Explorateur Windows GUI (Explorer.exe)

Utilisation de Windows CLI:

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

Même chose dans le code source Java : Ici variable filePaths est un ArrayList<String> et contient un dossier tous les fichiers chemin.

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

Cela a fonctionné pour moi et j'espère que cela vous aidera!

0
répondu ArifMustafa 2017-11-09 10:10:44