2

我有一个 Java 程序,它要求用户输入需要执行的文件的路径。

路径可以是这样的,例如:C:/ProgramFiles/Citrix/ICA Client/pnagent.exe我用这个路径创建一个File对象,并检查以确保它存在,并检查以确保它是一个文件,并检查以确保它是可执行的。就目前File而言,它是存在的完全有效的对象。

注意:该 File 对象称为“脚本”

但是当我运行脚本时,我收到空格错误。

Runtime rt = java.lang.Runtime.getRuntime();
Process pp = rt.exec(script.getAbsolutePath());

我是 100% 第一行正常工作。我收到的错误如下图所示:(我将其显示在 JOptionPane 中。)

错误图像

消除我的错误的最佳方法是什么?先谢谢了!


尝试的解决方案#1: Process pp = rt.exec("\""+script.getAbsolutePath()+"\"");

当我使用C:\Tools\IT Support\bookmark.htm我得到 在此处输入图像描述

4

2 回答 2

4

编辑:
到目前为止,最可靠的方法是使用Runtime.exec(String[] cmdarray)

如果您使用Runtime.exec(String command),Java 只会将命令拆分为空格。

使用由调用 new StringTokenizer(command) 创建的 StringTokenizer 将命令字符串分解为标记,而无需进一步修改字符类别。标记器生成的标记然后以相同的顺序放置在新的字符串数组 cmdarray 中。

另请参阅g++:找不到文件

或者像这样使用ProcessBuilder :

ProcessBuilder pb = new ProcessBuilder("ln", "-s", "dir1/dir2", "my dir/dir2");
Process p = pb.start();
于 2013-08-13T18:46:16.877 回答
1

尝试

String[] commands = {"cmd", "/c", "start", "\"DummyTitle\"",script.getAbsolutePath()};
Runtime.getRuntime().exec(commands);

这是一个仅限 Windows 的解决方案。

java.awt.Desktop在您的情况下可能是一个更好的解决方案,因为您需要“文件关联”机制。

public static void open(File document) throws IOException {
    Desktop dt = Desktop.getDesktop();
    dt.open(document);
}
于 2013-08-13T22:24:57.270 回答