【问题标题】:How to enter an escape sequence when using ProcessBuilder to open Windows file explorer and highlight the file?使用 ProcessBuilder 打开 Windows 文件资源管理器并突出显示文件时如何输入转义序列?
【发布时间】:2015-06-10 22:39:06
【问题描述】:

我需要能够从我的 java 程序中打开一个 Windows 资源管理器窗口并突出显示指定的文件。我阅读了How to use java code to open Windows file explorer and highlight the specified file? 并打算使用@krock 的以下建议:

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

但我遇到的问题是我的文件路径有空格,所以它只是打开到我的主文件夹。 @krock 提到你必须避开空格才能绕过空格,但我一定做得不对。

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

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

【问题讨论】:

    标签: java escaping whitespace explorer processbuilder


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      不幸的是,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。

      【讨论】:

        【解决方案3】:

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

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

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

        Process p = Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe \"" + hprlnkDocumentAvailable.getHref() + "\"");
        

        使用你的 sn-p:

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

        我在我的电脑上试过这个,但它只打开我的文档,不管我是使用公共目录还是带有特定文件的文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-13
          • 2011-08-11
          • 2013-01-18
          • 2017-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多