如何使用java代码打开Windows文件浏览器并突出显示指定的文件?

时间:2011-09-09 06:36:57

标签: java windows explorer

我现在使用java Desktop API来操作文件资源管理器。 我知道如何打开文件资源管理器,但我不知道如何打开它并突出显示指定的文件。

在我们使用Chrome时,在下载文件后,我们可以选择“在文件夹中显示”来打开文件浏览器并突出显示下载的文件。

如何使用java Desktop API这样做? 或者java中是否有其他API可以实现此操作?

7 个答案:

答案 0 :(得分:37)

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

如果PATH中有空格,这也有效。

答案 1 :(得分:27)

Desktop API不支持此功能。您将不得不使用ProcessBuilder(或Runtime.exec())来明确执行explorer.exe with the options you want。这只适用于Windows,如果你想在另一个操作系统上运行它,你还是必须使用Desktop API。

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

答案 2 :(得分:27)

编辑:

从java 9开始,Desktop API中现在有一种方法可以选择文件

desktop.browseFileDirectory(<file>)

编辑:

您无法使用java Desktop API突出显示特定文件。

回答原始问题:

Desktop API允许您使用此代码段

执行此操作
File file = new File ("c:\<directory>");
Desktop desktop = Desktop.getDesktop();
desktop.open(file);

上面使用的代码的文档在这些链接中, http://docs.oracle.com/javase/10/docs/api/java/awt/Desktop.htmlhttp://docs.oracle.com/javase/10/docs/api/java/io/File.html

在Windows计算机上,这将打开默认文件资源管理器,在其他系统上,它将分别打开默认资源管理器。

或者,您可以使用新的Java Path API构建所需的路径,然后调用返回相应File对象的方法。

为简洁起见,我排除了检查代码以确保Desktop和File对象存在。

答案 3 :(得分:3)

我们可以从命令行打开一个特定的路径:

start C:/ProgramData

您可以使用两种方法打开具有特定路径的Windows资源管理器:

  1. 使用Process类(已经回答)但使用启动命令

    try {
        Process builder = Runtime.getRuntime().exec("cmd /c start C:/ProgramData");
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  2. 使用桌面课程

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

答案 4 :(得分:1)

即使文件/文件夹名称在单词之间有多个空格也是如此。

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

答案 5 :(得分:1)

以上是上面的简短版本。

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

答案 6 :(得分:1)

始终使用&#34; \&#34;而不是&#34; /&#34;,否则只有资源管理器会打开,更多的是阅读 - Command-line switches that you can use to open the GUI Windows Explorer (Explorer.exe)

使用Windows CLI:

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

相同的Java源代码: 这里变量filePaths是ArrayList<String>并包含一个文件夹所有文件路径。

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

它对我有用,希望它可以帮到你!