web-dev-qa-db-fra.com

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

J'utilise maintenant Java API de bureau 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 utilisons Chrome, après avoir téléchargé des fichiers, nous pouvons choisir "afficher dans le dossier" pour ouvrir l'explorateur de fichiers et mettre en surbrillance le fichier téléchargé.

Comment utiliser Java API Desktop pour le faire? Ou existe-t-il une autre API dans Java peut réaliser cette action?

37
Charles Wu

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

Cela fonctionne également s'il y a un espace dans le PATH.

40
Stone

L'API Desktop ne prend pas en charge cela. Vous allez devoir utiliser ProcessBuilder (ou bien Runtime.exec() ) pour exécuter explicitement Explorer.exe avec le options que vous voulez . Cela ne fonctionnera que sur Windows, cependant, si vous souhaitez l'exécuter sur un autre système d'exploitation, vous devrez quand même utiliser l'API Desktop.

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

MODIFIER:

Depuis Java 9 il y a maintenant une méthode dans l'API Desktop pour sélectionner le fichier

desktop.browseFileDirectory(<file>)

MODIFIER:

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

RÉPONSE À LA QUESTION ORIGINALE:

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

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

La documentation du code utilisé ci-dessus se trouve à ces liens, http://docs.Oracle.com/javase/10/docs/api/Java/awt/Desktop.html et http : //docs.Oracle.com/javase/10/docs/api/Java/io/File.html

Sur un ordinateur Windows, cela ouvrira l'explorateur de fichiers par défaut et sur d'autres systèmes, il ouvrira leurs explorateurs par défaut respectivement.

Vous pouvez également utiliser la nouvelle API Java Path pour créer 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 Bureau et Fichier existent.

27
Zixradoom

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

start C:/ProgramData

Il existe deux façons dans Java vous pouvez utiliser pour ouvrir l'Explorateur Windows avec un chemin spécifique:

  1. Utiliser 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 Desktop

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

Utilisez toujours le "\" au lieu de "/", sinon seul l'explorateur s'ouvrira, donc lisez plus ceci - Commutateurs de ligne de commande que vous pouvez utiliser pour ouvrir le GUI Windows Explorer (Explorer.exe)

Utilisation de Windows CLI:

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

Idem dans Java code source: ici la variable filePaths est un ArrayList<String> et contient un dossier contenant tous les fichiers.

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 aide!

1
ArifMustafa

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
Martin Koukal

Cela fonctionne même si le nom du fichier/dossier comporte 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
Aravind Sharma