Java 当使用ProcessBuilder打开Windows文件资源管理器并高亮显示文件时,如何输入转义序列?

Java 当使用ProcessBuilder打开Windows文件资源管理器并高亮显示文件时,如何输入转义序列?,java,escaping,whitespace,explorer,processbuilder,Java,Escaping,Whitespace,Explorer,Processbuilder,我需要能够从java程序中打开Windows资源管理器窗口,并突出显示指定的文件。我阅读并打算使用@krock的以下建议: Process p = new ProcessBuilder("explorer.exe", "/select,C:\\directory\\selectedFile").start(); 但我遇到的问题是,我的文件路径有空格,所以它只是打开到我的主文件夹@克罗克提到,你必须逃离空间才能绕过空白,但我一定做得不对 有人能举一个例子,说明如何在下面的代码中正确地转义空格,以

我需要能够从java程序中打开Windows资源管理器窗口,并突出显示指定的文件。我阅读并打算使用@krock的以下建议:

Process p = new ProcessBuilder("explorer.exe", "/select,C:\\directory\\selectedFile").start();
但我遇到的问题是,我的文件路径有空格,所以它只是打开到我的主文件夹@克罗克提到,你必须逃离空间才能绕过空白,但我一定做得不对

有人能举一个例子,说明如何在下面的代码中正确地转义空格,以便我的java程序将Windows资源管理器打开到正确的文件夹(并且仍然突出显示该文件)中吗


您应该能够使用
\s
代替文件路径中的任何空白字符

我必须承认,在使用该方法之前,我从未遇到过文件路径中空格的问题,但是使用\w应该可以

参见下面的示例,我使用了一个带有空格的类似语句

Process p = Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe \"" + hprlnkDocumentAvailable.getHref() + "\"");
使用您的代码片段:

Process newWindowsExplorerWindow = new ProcessBuilder("explorer.exe", "/select,C:\\Users\\Public\\Music\\Sample\\sMusic\\mySong.mp3").start();

我在我的计算机上尝试了这个方法,但它只对我的文档开放,不管我是使用公共目录还是我的文档与特定文件一起使用。

不幸的是,Java在windows中如何解析/组装命令行,以及windows资源管理器希望命令行如何显示,似乎存在一些困难

从理论上讲,应该可以将整个
/select,C:\Users\Public\Music\Sample Music\mySong.mp3
字符串括在引号中并使其工作。不幸的是,这在我使用Java8和Windows的机器上不起作用

在我的机器上工作的是在
/select,…
开关前面放置一个引号,如下所示:

Process newWindowsExplorerWindow = new ProcessBuilder("explorer.exe",
    "\"/select,C:\\Users\\Public\\Music\\Sample Music\\mySong.mp3").start();
//   ^^ Escaped quote character 

不保证这将适用于其他版本的Windows和/或Java。

谢谢大家提供的答案。最后,我能够让它工作的唯一方法是将所需的操作/select从文件路径中分离出来,并在每个操作周围分别加上引号(最后是3个参数,而不是2个),如下所示:

Process newWindowsExplorerWindow = new ProcessBuilder("explorer.exe", "/select,", "C:\\Users\\Public\\Music\\Sample Music\\mySong.mp3").start();
Process newWindowsExplorerWindow = new ProcessBuilder("explorer.exe", "/select,", "C:\\Users\\Public\\Music\\Sample Music\\mySong.mp3").start();