Java 当使用ProcessBuilder打开Windows文件资源管理器并高亮显示文件时,如何输入转义序列?
我需要能够从java程序中打开Windows资源管理器窗口,并突出显示指定的文件。我阅读并打算使用@krock的以下建议: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(); 但我遇到的问题是,我的文件路径有空格,所以它只是打开到我的主文件夹@克罗克提到,你必须逃离空间才能绕过空白,但我一定做得不对 有人能举一个例子,说明如何在下面的代码中正确地转义空格,以
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();