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

我现在使用Java桌面API来操纵文件资源pipe理器。 我知道如何打开文件资源pipe理器,但我不知道如何打开它并突出显示指定的文件。

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

如何使用Java桌面API来做到这一点? 或者是否有任何其他在Java中的API可以实现这个动作?

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

这也适用于PATH有空格的情况。

桌面API不支持这一点。 你将不得不使用ProcessBuilder (或者Runtime.exec() )来显式地使用你想要的选项来执行explorer.exe。 这只会在Windows上工作,如果你想在另一个操作系统上运行,你将不得不使用桌面API。

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

编辑:

您无法使用Java桌面API突出显示特定的文件。

对原始问题的回答:

桌面API将允许你通过使用这个片段来做到这一点,

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

上面使用的代码的文档位于以下链接: http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html和http://docs.oracle.com/javase/ 7 /文档/ API / JAVA / IO / File.html

在Windows计算机上,这将打开默认文件浏览器,并在其他系统上分别打开其默认浏览器。

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

为了简洁,我排除了检查代码以确保桌面和文件对象存在。

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

 start C:/ProgramData 

在Java中有两种方法可以用来打开具有特定路径的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(); } 

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

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

这是上面的简短版本。

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

总是使用“\”而不是“/”,否则只有资源管理器会打开,更多的读取这个命令行开关,您可以用来打开图形用户界面Windows资源管理器(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(); } 

它为我工作,并希望它可以帮助你!