猿问

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

我有一个名为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)


饮歌长啸
浏览 134回答 3
3回答

Helenr

我不确定“系统编辑器”是什么,但如果它是您要打开的特定应用程序,则需要运行该应用程序并将日志文件名作为参数传递。您需要确定应用程序的路径,然后才能使用该Runtime.getRuntime().exec()方法打开文件。例如,如果您想使用记事本打开日志文件,您可以这样做:Runtime.getRuntime().exec("C:\\Windows\\System32\\notepad.exe error.log.1");当然,这假设应用程序接受文件名作为参数。您需要查看此系统编辑器具有哪些命令行语法。

慕侠2389804

有两种方法可以处理这个问题:重命名您的文件,然后按照您的说明打开它;显式使用命令(编辑器)打开文件;在第二种情况下,它将是这样的: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();    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答