有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java运行时。带有绝对目录的exec()

我想使用运行时。exec()在带有空格的目录中启动另一个进程。(听起来很愚蠢,但我真的想满足我的好奇心)

问题的详细信息(简化版) 我有一个我的计划。exe位于C:/Program Files/MyProgram中

我观察到: 1). 当我调用运行时。exec(“C://Program Files//MyProgram//MyProgram.exe”),IOException表示:找不到文件C:/Program,错误代码为2。我想这一定是空间的结果

(二)。我试过:运行时。exec(“/”C://Program Files//MyProgram//MyProgram.exe/”),IOException表示:找不到文件:“C:/Program Files/MyProgram/MyProgram.exe”

(三)。我吸取了教训,尝试了一个重载版本的运行时。exec():File dir=新文件(“C://Program Files//MyProgram//”); 并运行:运行时。exec(“myprogram.exe”,null,dir),它说:找不到文件myprogram。C中的exe:/Program Files/MyProgram/

(四)。我尝试了1),而不是“程序文件”,我把它重命名为程序文件,一切正常

我知道我也可以使用ProcessBuilder做类似的事情,但我不能让它在我心中消失。。。(也许这是我的弱点)。有人能告诉我为什么2)和3)不起作用吗

谢谢


共 (3) 个答案

  1. # 1 楼答案

    几分钟前我看到了另一个答案,在评论区,我终于找到了解决方法。很抱歉,我不知道这个答案是如何被删除的。。。或者是谁通过评论答案给出了答案

    更新:通过进一步的调查,我发现是马特·凯恩通过评论给出了正确的答案。请允许我对您的帮助表示深深的感谢。;-)

    根据Matt的评论,以下是我如何解决这一问题的,并对工作进行了测试:

    String[] cmdArray = new String[]{"C://Program Files//MyProgram//myprogram.exe", arg1, arg2};
    Runtime.exec(cmdArray);
    

    其中arg1和arg2是传递给myprogram的两个参数。exe

    使用exec()的重载版本:

    1)进程执行(字符串[]cmdarray)

    2)Process exec(字符串[]cmdarray,字符串[]envp)

    3)Process exec(字符串[]cmdarray、字符串[]envp、文件目录)

    任何一个都可以。这里我想提到3)中的dir和cmdarray中的绝对路径之间的区别,在我的例子中,绝对路径可以是“C://Program Files//MyProgram//”

    在目录3)中,您可以指定运行的目录。exe,则指定的所有相对目录将追加到此目录之后。示例:如果您的dir是C:/Hello World,则在您的目录中。exe您将在/folder1中存储一个文件,最后您将在C:/Hello World/folder1中找到该文件

    但是,dir不适用于可执行文件。(在我的例子中,它是myprogram.exe)。例如,如果您的。exe位于C:/Program Files/MyProgram/中,您已经将dir设置为C:/Program Files/MyProgram/。如果不指定可执行文件的绝对路径,则无法成功运行程序。就我而言,你只有通过以下方式才能成功: cmdarray[0]=“C://Program Files//MyProgram//MyProgram.exe” 如果您弄错了,错误将如下所示: JAVA木卫一。异常:无法运行程序“myprogram.exe”(在目录“C:/program Files/myprogram/”中):CreateProcess error=2,系统找不到指定的文件。 请注意,它只说“不能在**目录中运行”,而不是说“在***目录中找不到文件”。我觉得这很可笑,但不管怎样,这就是它的工作原理

  2. # 2 楼答案

    我也遇到了同样的问题,用c:\PROGRA~1而不是c:\program文件解决了这个问题

  3. # 3 楼答案

    尝试在空格前加一个反斜杠。。。“C:/Program\and\Files/MyProgram/MyProgram.exe”

    您必须使用双反斜杠,以便将其传递给操作系统

    如果不起作用,请尝试“C://\”程序和文件\“/MyProgram/MyProgram.exe”