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

3

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

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

但我遇到的问题是我的文件路径中有空格,所以它只会打开我的主文件夹。@krock提到过,你必须转义空格来避免空格,但我肯定没有做对。
请问有人能够给出一个确切的示例,说明如何在以下代码中正确转义空格,以便我的java程序打开Windows Explorer到正确的文件夹(并仍然突出显示该文件)吗?
Process newWindowsExplorerWindow = new ProcessBuilder("explorer.exe", "/select,C:\\Users\\Public\\Music\\Sample Music\\mySong.mp3").start();
3个回答

2

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

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

1
很不幸,Java在Windows系统中解析/组装命令行和Windows资源管理器所期望的呈现方式存在一些困难。
理论上,应该可以将整个“/select,C:\ Users \ Public \ Music \ Sample Music \ mySong.mp3”字符串用引号括起来并使其正常工作。但很遗憾,在我的机器上,使用Java 8和Windows操作系统时,这种方法无法实现。
在我的机器上有效的方法是在“/select,...”开关前面放置一个单引号,如下所示:
Process newWindowsExplorerWindow = new ProcessBuilder("explorer.exe",
    "\"/select,C:\\Users\\Public\\Music\\Sample Music\\mySong.mp3").start();
//   ^^ Escaped quote character 

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


0

在文件路径中,您应该能够使用\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();

我在我的电脑上尝试过这个操作,但无论我使用公共目录还是我的文档与特定文件,它只会打开到我的文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接