【问题标题】:Java runtime execJava 运行时执行
【发布时间】:2012-06-28 16:44:21
【问题描述】:

我正在尝试在 Java 中使用 system exec 做某事

Runtime.getRuntime().exec(command);

令人惊讶的是,与路径、目录和文件相关的所有内容都无法正常工作

我不明白为什么,只想知道是否有任何替代品

【问题讨论】:

  • 告诉我们您要做什么。只有我们才能给予适当的帮助
  • "Runtime.getRuntime().exec(command); 令人惊讶.." 不是我。见When Runtime.exec() won't。另外,为了尽快获得更好的帮助,请发帖SSCCE
  • 为什么不使用 J2SE 类和方法来访问文件系统?
  • cd 不起作用。这不是一个可执行文件,这是你的 shell 的一个功能。
  • @Thilo 谢谢! cd的替代品是什么

标签: java command runtime system exec


【解决方案1】:

替代方法是使用ProcessBuilder 类,它有一个更干净的界面,但您的主要问题可能与操作系统如何处理命令行有关,并且 Java 无法帮助您解决这个问题.

【讨论】:

    【解决方案2】:

    如上所述,cd 是一个内置的 shell。即它不是可执行文件。您可以使用以下方法确定:

    $ which cd
    cd: shell built-in command
    

    由于它不是独立的可执行文件,Runtime.exec() 将无法使用它做任何事情。

    您最好编写一个 shell 脚本来执行特定于 shell 的操作(例如更改工作目录),然后使用 Runtime.exec() 简单地执行该 shell 脚本。您可以在脚本中设置 PATH 变量等,让 Java 简单地执行您的脚本。

    吸引人们注意的一件事是您必须使用脚本的 stdout/stderr(即使您将其丢弃)。如果您没有正确执行此操作,您的进程可能会阻塞。详情请见this SO answer

    【讨论】:

    • 好的,谢谢。我会试着弄清楚。 shell 脚本不是一个好主意我需要流
    • 你能详细说明一下吗?你的流评论?
    【解决方案3】:

    exec() 方法可以接受三个参数。第三个是您的子进程应该用作其工作目录的目录。无论如何,这解决了你的“cd”问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-07
      • 2017-02-18
      • 2019-02-26
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多