如何从Java启动给定文件的默认(本机)应用程序?

Thi*_*ilo 6 java explorer finder file-manager eclipse-rcp

我正在显示一个文件列表; 即我的Java应用程序(Eclipse RCP)中的xls,doc,pdf,odt等.当用户单击该文件时,我想启动相应的(根据操作系统认为的)本机应用程序,就像在Windows资源管理器或Finder中一样.

当我在这里时:最好还显示Finder或Explorer用于不同文件类型的相同图标.

是否有一个库或Eclipse插件?

Jos*_*don 14

你想要的是java.awt.Desktop:

Desktop.getDesktop().open( file );
Run Code Online (Sandbox Code Playgroud)

  • Eero,该功能按设计工作:http://download.oracle.com/javase/6/docs/api/java/awt/Desktop.html#open%28java.io.File%29 open将抛出IOException"如果指定的文件没有关联的应用程序或关联的应用程序无法启动".如果抛出IOException,您可能会考虑提示应用程序使用. (3认同)

Thi*_*ilo 6

我现在已经在Eclipse的SWT中找到了一个API,它似乎可以解决这个问题: org.eclipse.swt.program.Program "提供访问设施以发现外部程序启动的操作系统特定方面."

它有方法可以找到给定文件扩展名的程序,获取程序的图标,甚至启动程序.


cle*_*tus 2

听起来您正在寻找Java 激活框架(“JAF”)。通过此 API,您可以确定文件是什么以及可以对它们执行哪些操作。或者Java 桌面集成组件(“JDIC”)。JDIC 允许您创建并且毫无疑问地查询文件关联。

然而,这两个项目似乎都处于半废弃状态(叹气)。但这对于Sun 如今来说已经是司空见惯的事了。我所知道的唯一一件事是一些 Windows 特定的第三方库,它基于 JNI,称为Winpack。它还可以做很多其他事情。

您可以使用FileSystemView类 (Java 1.4+)获取关联的图标