我现在使用java Desktop API来操作文件资源管理器。 我知道如何打开文件资源管理器,但我不知道如何打开它并突出显示指定的文件。
在我们使用Chrome时,在下载文件后,我们可以选择“在文件夹中显示”来打开文件浏览器并突出显示下载的文件。
如何使用java Desktop API这样做? 或者java中是否有其他API可以实现此操作?
答案 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.html和 http://docs.oracle.com/javase/10/docs/api/java/io/File.html
在Windows计算机上,这将打开默认文件资源管理器,在其他系统上,它将分别打开默认资源管理器。
或者,您可以使用新的Java Path API构建所需的路径,然后调用返回相应File对象的方法。
为简洁起见,我排除了检查代码以确保Desktop和File对象存在。
答案 3 :(得分:3)
我们可以从命令行打开一个特定的路径:
start C:/ProgramData
您可以使用两种方法打开具有特定路径的Windows资源管理器:
使用Process类(已经回答)但使用启动命令
try {
Process builder = Runtime.getRuntime().exec("cmd /c start C:/ProgramData");
} catch (IOException e) {
e.printStackTrace();
}
使用桌面课程
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();
}
它对我有用,希望它可以帮到你!