Hvordan bruger du java kode til at åbne Windows fil explorer og fremhæve den angivne fil?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger nu Java Desktop API til at manipulere filopkalder.
Jeg ved, hvordan man åbner filutforskeren, men jeg ved ikke hvordan man åbner den og fremhæver den angivne fil.


Da vi bruger Chrome, efter at have hentet filer, kan vi vælge 'Vis i mappe' for at åbne filutforskeren og fremhæve den downloadede fil.


Hvordan bruger du Java Desktop API til at gøre det?
Eller er der nogen anden API i Java, der kan realisere denne handling?

Bedste reference


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


Dette virker også, hvis der er plads i PATH.

Andre referencer 1


Desktop API understøtter ikke dette. Du skal bruge ProcessBuilder (eller alternativt Runtime.exec()) eksekveret explorer.exe eksplicit med de valgmuligheder du ønsker. Dette vil kun fungere på windows, men hvis du vil køre dette på et andet OS, skal du alligevel bruge Desktop API. [15] [16] [17]


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

Andre referencer 2


REDIGERE:


Du kan ikke fremhæve en bestemt fil med java Desktop API.


SVAR TIL OPRINDELIGT SPØRGSMÅL:


Desktop-API'et giver dig mulighed for at gøre dette ved at bruge dette uddrag,


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


Dokumentationen for den kode, der er anvendt ovenfor, er på disse links,
http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html og
http://docs.oracle.com/javase/7/docs/api/java/io/File.html[18][19]


På en Windows-computer vil dette åbne standardfilen, og på andre systemer vil den åbne deres standardforskere.


Alternativt kan du bruge den nye Java-path-API til at opbygge den ønskede vej og derefter påberåbe den metode, der returnerer det tilsvarende filobjekt.


Til korthed udelukkede jeg kontrolkode for at sikre, at skrivebords- og filobjekterne eksisterer.

Andre referencer 3


Vi kan åbne en bestemt sti fra kommandolinjen med:


start C:/ProgramData


Der er to måder i java du kan bruge til at åbne windows explorer med specifik vej:



  1. Brug procesklasse (som allerede besvaret) men med startkommando


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

  2. Brug skrivebordsklasse


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


Andre referencer 4


Dette fungerer, selvom filen/mappenavnet har flere mellemrum mellem ordene.


    //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();

Andre referencer 5


Her er en kortere version af ovenstående.


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

Andre referencer 6


Brug altid '\' i stedet for '/', ellers vil kun Explorer åbnes, for mere læs dette - Kommandolinjebryttere, som du kan bruge til at åbne GUI Windows Explorer (Explorer.exe) [20]


Brug af Windows CLI:


C:UsersMd Arif Mustafa>explorer.exe /select, "C:UsersMd Arif MustafaMusicAafreen-Himesh.mp3"


Samme i Java-kildekode:
Her er variable filPaths en ArrayList<String> og indeholder en mappe alle filer sti.


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


Det fungerede for mig og håber det hjælper dig!