首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果文件没有已知的扩展名,我如何告诉Java使用系统的默认文本编辑器打开文件?

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

Stack Overflow用户
提问于 2018-08-13 08:32:49
回答 2查看 881关注 0票数 1

我有一个名为error.log.1的文件。

我想告诉Java使用系统编辑器打开这个文件。

如果将其命名为error.log,则可以执行以下操作:

代码语言:javascript
复制
Desktop.getDesktop().edit(new File("error.log") );

但是,由于它不是可识别的文件扩展名,因此无法打开。相反,我得到了一个错误:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2018-08-13 09:25:42

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

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

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

代码语言:javascript
复制
Runtime.getRuntime().exec("C:\\Windows\\System32\\notepad.exe error.log.1");

当然,这假设应用程序接受文件名作为参数。你需要研究一下这个系统编辑器的命令行语法。

票数 0
EN

Stack Overflow用户

发布于 2018-08-13 10:51:49

正如Zephyr所建议的,一个好的解决方案是指定默认编辑器的路径(编写一些特定于平台的代码)。或者更好的是,你可以打包你自己的跨平台文本编辑器,像jEdit这样的东西可能是一个很好的选择。

然而,如果你真的想使用Desktop.getDesktop().edit(path),那么一个技巧就是简单地检查文件扩展名,如果它是未知的,那么在末尾添加".log“或".txt”。

有点像这样:

代码语言:javascript
复制
File originalName = new File("path/to/my/file/error.log.1");
File appendedName = new File(originalName.getAbsolutePath()+".log");

boolean success = originalName.renameTo(appendedName);

if (success) {
   Desktop.getDesktop().edit(appendedName);
}

//Change it back when you are done:
appendedName.renameTo(originalName);

显然,如果多个源/应用程序同时读取原始文件,这将不起作用(您可以制作副本而不是重命名),但它可能适合您的用例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51813927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档