如果没有已知的扩展名,如何告诉Java使用系统的默认文本编辑器打开文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (86)

我有一个名为error.log.1的文件,我想告诉Java使用系统编辑器打开这个文件。

如果它被命名为error.log,则下列工作:

Desktop.getDesktop().edit(new File("error.log") );

但是,由于它不是一个可识别的文件扩展名,所以它不会打开。

我得到了一个错误:

Exception in thread "main" java.io.IOException: Failed to open error.log.1. 
Error message: No application is associated with the specified file for this operation.

at sun.awt.windows.WDesktopPeer.ShellExecute(Unknown Source)
at sun.awt.windows.WDesktopPeer.open(Unknown Source)
at java.awt.Desktop.open(Unknown Source)
at net.joshuad.hypnos.workbench.EditorTest.main(EditorTest.java:9)
提问于
用户回答回答于

有两种方法可以解决此问题:

  1. 重命名你的文件然后按照你提到的那样打开它;
  2. 显式使用命令(编辑器)打开文件;

在第二种情况下,它将是:

private static void openByCommand(String filePath){
    try {
        Process process = new ProcessBuilder("gedit", filePath)
                .directory(new File("/home/hearen")) // set up your working directory;
                .start();
        int exitCode = process.waitFor();
        System.out.println(exitCode);
    } catch (IOException | InterruptedException ignored) {
        ignored.printStackTrace();
    }
}
用户回答回答于

我不确定“系统编辑器”是什么,但如果它是你要打开的特定应用程序,则需要运行该应用程序并将日志文件名作为参数传递。

你需要确定应用程序的路径,然后你可以使用Runtime.getRuntime().exec()方法打开该文件。

例如,如果要使用记事本打开日志文件,可以这样做:

Runtime.getRuntime().exec("C:\\Windows\\System32\\notepad.exe error.log.1");

当然,这假定应用程序接受文件名作为参数,你需要查看此系统编辑器具有的命令行语法。

扫码关注云+社区

领取腾讯云代金券