我可以使用java.awt.Desktop.getDesktop.open(someFile)
系统默认应用程序打开文件。但是,如果该应用程序有任何输出,它将显示在控制台中。由于我正在制作命令行实用程序,因此这是丑陋/不必要的。有没有办法重定向它的标准错误流?
如果无法做到这一点,那么如何找到Desktop
用于打开文件的可执行文件的路径呢?Process
收集完这些信息后,使用/就很简单了ProcessBuilder
。
原则上,如果您将使用ProcessBuilder
. cmd.exe
您可以通过Windows 和xdg-open
Linux(参见Xdg-open )将此任务委托给操作系统,如下所示:
public static void main(String[] args) {
String filePath = args[0];
String operatingSystem = System.getProperty("os.name");
try{
if(operatingSystem.toLowerCase().contains("windows")){
ProcessBuilder pb = new ProcessBuilder("cmd.exe","/c",filePath);
Process p = pb.start();
} else if (operatingSystem.toLowerCase().contains("linux")){
ProcessBuilder pb = new ProcessBuilder("xdg-open",filePath);
Process p = pb.start();
} else {
throw new UnsupportedOperationException(String.format("Not supported for %1$1s", operatingSystem));
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
注意:我没有使用ProcessBuilder#redirectError
方法,因为它只是一个示例。
免责声明:正如我在评论中所说,这是一个丑陋/有限的解决方法,但它有效。