为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2021-07-08 10:02:51
我有一个名为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)
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

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

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

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

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

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


查看完整回答
反对 回复 2021-07-14
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

有两种方法可以处理这个问题:

  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();

    }

}


查看完整回答
反对 回复 2021-07-14
  • 3 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信