How to use java code to open Windows file explorer and highlight the specified file?

JavaWindowsExplorer

Java Problem Overview


I am now using java Desktop API to manipulate file explorer. I know how to open the file explorer but I don't know how to open it and highlight the specified file.

As we using the Chrome, after downloading files, we can choose "show in folder" to open the file explorer and highlight the downloaded file.

How to use java Desktop API to do so? Or is there any other API in java can realize this action?

Java Solutions


Solution 1 - Java

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

This also works if there is a space in the PATH.

Solution 2 - Java

EDIT:

As of java 9 there is now a method in the Desktop API to select the file

desktop.browseFileDirectory(<file>)

EDIT:

You cannot highlight a specific file with the java Desktop API.

ANSWER TO ORIGINAL QUESTION:

The Desktop API will allow you to do this by using this snippet,

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

The documentation for the code used above is at these links, http://docs.oracle.com/javase/10/docs/api/java/awt/Desktop.html and http://docs.oracle.com/javase/10/docs/api/java/io/File.html

On a Windows computer this will open the default file explorer and on other systems it will open their default explorers respectively.

Alternatively you could use the new java Path API to build the required path and then invoke the method that returns the corresponding File object.

For brevity I excluded the checking code to make sure the Desktop and File objects exist.

Solution 3 - Java

The Desktop API does not support this. You are going to have to use ProcessBuilder (or alternatively Runtime.exec()) to execute explorer.exe explicitly with the options you want. This will only work on windows though, if you want to run this on another OS you will have to use the Desktop API anyway.

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

Solution 4 - Java

We can open a specific path from command line with :

start C:/ProgramData

There are two ways in java you can use to open windows explorer with specific path:

  1. Use Process class(as already answered) but with start command

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

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

Solution 5 - Java

Always use the "" instead of "/", otherwise only the Explorer will open, fore more read this - Command-line switches that you can use to open the GUI Windows Explorer (Explorer.exe)

Using Windows CLI :

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

Same in Java source code : Here variable filePaths is an ArrayList<String> and contains a folder all files path.

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

It worked for me and hope it helps you!

Solution 6 - Java

This works even if file/folder name has multiple spaces between words.

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

Solution 7 - Java

Here is shorter version of above.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCharles WuView Question on Stackoverflow
Solution 1 - JavaStoneView Answer on Stackoverflow
Solution 2 - JavaZixradoomView Answer on Stackoverflow
Solution 3 - JavakrockView Answer on Stackoverflow
Solution 4 - JavaIamat8View Answer on Stackoverflow
Solution 5 - JavaArifMustafaView Answer on Stackoverflow
Solution 6 - JavaAravind SharmaView Answer on Stackoverflow
Solution 7 - JavaMartin KoukalView Answer on Stackoverflow