当前位置: 首页 > 面试题库 >

包含多个空格的参数上的Runtime.exec

董霖
2023-03-14
问题内容

任何人都可以进行以下跑步吗?

public class ExecTest {
  public static void main(String[] args) {
    try {
      //Notice the multiple spaces in the argument
      String[] cmd = {"explorer.exe", "/select,\"C:\\New      Folder\\file.txt\""};

      //btw this works
      //String cmd = "explorer.exe /select,\"C:\\New Folder\\file.txt\"";

      //and surprisingly this doesn't work
      //String[] cmd = {"explorer.exe", "/select,\"C:\\New Folder\\file.txt\""};

      //Update: and (as crazy as it seems) the following also worked
      //String[] cmd = {"explorer.exe", "/select,\"C:\\New", "Folder\\file.txt\""};

      Runtime.getRuntime().exec(cmd);
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
}

使用Java6。已在Vista x64下测试。顺便说一句,获取执行的字符串(必须使用exec的String版本来获取它)并在Vista的开始菜单的“
搜索” 字段中使用它会按预期运行。
任何帮助将不胜感激。我疯了..!

更新:我为我的帖子指出的第二个奇怪的问题添加了一个解决方案,即exec的两个版本的行为不同。该解决方案基于修剪的答案。再次感谢。


问题答案:

好的,这不仅是更新,而且是答案,所以我将其归档为一个。根据我能找到的所有信息,理论上应该执行以下操作:

String [] cmd = {“ explorer.exe”,“ / select,\” C:\ New“,”“,”,“,”,“,”,“,”,“
Folder \ file.txt \” “};

多个空格已分解为空字符串,并且使用了exec的数组版本。使用上面的数组,我在java.lang.ProcessImpl的第50-75行调试了循环,最后构造了一个字符串。结果字符串为:

explorer.exe /选择,“ C:\ New Folder \ file.txt”

这是作为ProcessImpl native create方法的第一个参数(与第118行相同的类)传递的,该方法似乎 无法正常运行此命令

所以我想一切都到此为止…可悲的是。

Thnx修剪指出了Java错误。感谢每个人的时间和兴趣!



 类似资料:
  • 问题内容: 可能是Apache Commons Exec中有一个错误,或者我使用的API错误,但是当我使用该类添加包含空格的参数时,会添加一些引号并将其包含在给出的参数中。 例如:当我打电话给我时,当我打电话给我(它包含转义引号,这是命令行参数本身的一部分)时,我得到了。 因此,以下测试失败了,因为正如您在最后一行中看到的那样,Apache Exec正在生成后一个版本,而在该版本中本应生成第一个版

  • 问题内容: 我知道关于从Java执行流程有很多解决的问题,但是我无法使用提供的答案解决问题。我正在尝试从Java应用程序创建postgresql数据库备份。我使用以下代码 执行以上代码后,出现以下错误: 仅当备份文件的路径包含空格时才出现问题,否则将创建备份。我试图在文件路径中同时使用斜杠和反斜杠,但我引用了文件路径,但每次都遇到相同的错误。可以从命令提示符处执行命令。 我做错了。关于Proces

  • 我用 1 个类的不同数据填充我的表视图没有问题。但是它对多个类的我不起作用。知道如何解决这个问题吗?我已经在stackoverflow上查看了类似的问题。但他们都帮不了我。如果您对“回调”类有任何建议,请为我提供完整的导入,因为那里有几个回调类。 进一步的问题:如何在表格单元格的哈希集中显示实例的某个属性。所以我在我的 TaskControl 类中有一个 HashSet。在该HashSet中,有类

  • 以下是我在泽西使用的方法签名,当我调试/运行程序时,我收到错误: [[致命]方法公共javax。ws。rs.core。响应com。xxxx。xxxxx。Xxxxx。xxxxx。资源类com上的xxxxxxxx(java.lang.String、java.lang.String、java.lang.String、javax.ws.rs.container.ContainerRequestContex

  • 我希望在每个数组中获取多个对象,但我的代码显示了单个对象的操作。下面是我的PHP代码,我如何添加另一个循环来获取多个对象 这是显示单个物体的结果

  • 所以我有一个练习问题,我应该用员工的信息创建一个数组,并将其传递给类;我的代码有一个问题,我似乎想不出来。 代码的目的是:将代码中看到的信息放入数组,然后传递给类中的方法,然后打印给用户。(类中的代码非常好,因此这里没有包括它)。