我尝试通过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-aund b / allg fil / ref.txt”
xdg-open:意外参数“ in”
但这对我来说似乎很奇怪-为什么即使在整个路径都用引号引起来的情况下,为什么
in
之前的命令也会分开? 最佳答案
请注意,您不需要xdg-open
来执行此操作。
您可以使用与Java平台无关的Desktop API:
if(Desktop.isDesktopSupported()) {
Desktop.open("/path/to/file.txt");
}
更新资料
如果标准方法仍然存在问题,则可以将参数作为数组传递,因为
Runtime.exec
不会调用外壳程序,因此不支持或不允许引用或转义:String program;
if (Program.isPlatformLinux())
{
program = "xdg-open";
} else {
program = "something else";
}
Runtime.getRuntime().exec(new String[]{program, file.getAbsolutePath()});