Java Runtime exec()不起作用

时间:2016-11-12 23:48:39

标签: java bash shell runtime xdgutils

我尝试通过java像这样执行shell命令

if (Program.isPlatformLinux())
{
    exec = "/bin/bash -c xdg-open \"" + file.getAbsolutePath() + "\"";
    exec2 = "xdg-open \"" + file.getAbsolutePath() + "\"";
    System.out.println(exec);
}
else
{
    //other code
}
Runtime.getRuntime().exec(exec);
Runtime.getRuntime().exec(exec2);

但根本没有任何事情发生。当我执行此代码时,它会在控制台中打印/bin/bash -c xdg-open "/home/user/Desktop/file.txt",但不会打开该文件。我还尝试先调用bash,然后调用xdg-open - 命令,但没有变化。

这里有什么问题,我该如何解决?

编辑:调用的输出如下所示:

  

xdg-open“/ home / user / Desktop / files / einf in a-und b / allg fil / ref.txt”   xdg-open:意外的参数'in'

但这对我来说非常奇怪 - 为什么命令在in甚至整个路径之前单独用引号设置?

1 个答案:

答案 0 :(得分:2)

请注意,您不需要xdg-open来执行此操作。 您可以使用与java平台无关的Desktop API:

if(Desktop.isDesktopSupported()) {
    Desktop.open("/path/to/file.txt");
}

<强>更新

如果标准方法仍然存在问题,您可以将参数作为数组传递,因为Runtime.exec不会调用shell,因此不支持或允许引用或转义:

String program;
if (Program.isPlatformLinux())
{
    program = "xdg-open";
} else {
    program = "something else";
}

Runtime.getRuntime().exec(new String[]{program, file.getAbsolutePath()});