接下类举例说明怎样使用上面提到的这些类。请注意:示例代码需要用最终发布的0.9.1稳定版本的JDIC库。
注册关联
========
第一个例子让扩展名为.log的文件类型上的“打开”动作关联到WINDOWS的记事本程序。示例代码在文件类型信息表中新增关于.log类型的条目。WINDOWS操作系统上忽略大小写,我们既可以.log,.Log,.LoG或者.loG来表示。一旦程序被执行,用户就可以双击方式用记事本打开.log文件了。再提醒下,Association已经使得文件类型在信息表里固定下来了,也就是说即使这个JAVA程序终止后,.log文件的类型的关联依旧在文件类型信息表里保存着。
importorg.jdesktop.jdic.desktop.*;
importorg.jdesktop.jdic.filetypes.*;
AssociationServiceserv=newAssociationService();
Associationlogassoc=newAssociation();
//Addsthe.logtypetotheAssociationobject.
logassoc.addFileExtension("LOG");
//AddsanActiontotheAssociationobjectthatwill
//opena.logfilewithWindowsNotepad.
logassoc.addAction(newAction("open","C:\\WINDOWS\\system32\\NOTEPAD.EXE%1"));
try{
//Addsthe.logAssociationtothefiletypes'table
//attheuserlevelusinganAssociationServiceobject.
serv.registerUserAssociation(logassoc);
}
catch(java.lang.IllegalArgumentExceptione){
//ThisexceptionwillbecaughtifthegivenAssociationisnotvalid
//tobeaddedtothetableoffiletypes.
System.err.println(e);
}
catch(AssociationAlreadyRegisteredExceptione){
//ThisexceptionwillbecaughtiftheAssociationalready
//existsinthetableoffiletypes.
System.err.println(e);
}
catch(RegisterFailedExceptione){
//ThisexceptionwillbecaughtiftheAssociationwas
//unabletobeaddedtothetableoffiletypes.
System.err.println(e);
}
.log文件类型被添加到信息表后,这个信息表类似下图所展示的效果。图中附带着在WINDOWS
操作系统上的.log文件带着的那一个图标。

删除关联
========
不仅可向操作系统中增加文件关联,也能删除它们。接下来的代码演示了从文件类型信息表里删除与.log有关的条目。借助AssociationService对象在文件类型信息表里找到有关.log的条目并永久地删除之。
importorg.jdesktop.jdic.desktop.*;
importorg.jdesktop.jdic.filetypes.*;
AssociationServiceserv=newAssociationService();
//ThisusesanAssociationServicetosearchthetableoffile
//typesforthe.logextension.Ifthe.logfileisfound,
//anAssociationobjectrepresentingthe.logfiletype
//willbereturned.Otherwise,nullisreturned.
Associationlogassoc=serv.getFileExtensionAssociation("LOG");
try{
//TheAssociationServicewillremovethe.logfiletypefrom
//thetableoffiletypes.
serv.unregisterUserAssociation(logassoc);
}catch(java.lang.IllegalArgumentExceptione){
//ThisexceptionwillbecaughtifthegivenAssociationisnotvalid
//toberemovedfromthetableoffiletypes.
System.err.println(e);
}catch(AssociationNotRegisteredExceptione){
//ThisexceptionwillbecaughtiftheAssociationdoesnotalready
//existinthetableoffiletypes.
System.err.println(e);
}catch(RegisterFailedExceptione){
//Thisexceptionwillbecaughtiftheassociationwasunabletobe
//removedfromthetableoffiletypes.
System.err.println(e);
}
从文件类型信息表中删除关于.log的条目后,这个信息表类似如下图所示,同时也附带
上此时的对应于.log文件的图标

尽管以上的例子展示了JDIC在文件类型上所提供的功能,但还是至少有一个主要的局限性。
当文件类型被关联到多个动作,如“打开”或“编辑”,这些动作需要用对应的可执行程序来执行“打开”或者“编辑”。可执行程序路径完全是与操作系统相关的,所以说使用动作的时候并不能做到与平台无关。但是JDIC中多数的特性是平台无关的,并不像那些与文件类型
有关的类那样的平台相关。
以上代码点出了可运行的示例代码中的要点处。你可下载本文后面提到的NetBeansIDE5.0和展示如何使用JDIC桌面程序关联的示例源代码来建立完成的应用程序。这个程序用仅带一个菜单条的JFrame来让用户添加和删除一个.jlog类型。当文件类型信息表里有.jlog条目时,用户可打开.jlog文件。为了在此应用程序里打开.jlog文件,还需要JDIC中其他几个类(rg.jdesktop.jdic.desktop.Desktop)的一些帮助。这个Desktop类可让JAVA应用程序用本机程序来打开,编辑或者打印文件。
下图显示了运行在WINDOWSXP操作系统上的效果,可看到有个错误日志的菜单。这个示例程序假设
.jlog类型未在文件类型信息表中。

结论
=====
借助JDIC的实用特性,JAVA程序员就好象拥有了一样工具,借助这个工具来访问以前所不能访问的操作系统特性。本文讨论了JDIC是如何在多个操作系统上的文件类型关联方面工作的,也给你准备了一个完成的示例程序来让用户重置操作系统上的文件关联。通过这个应用程序,清楚地说明:在JAVA平台上已经开始用JDIC来为本机程序和JAVA程序之间架设了桥梁。
源代码
======
以NetBeansIDE5.0的工程形式下载完整的应用程序源代码(http://java.sun.com/developer/technicalArticles/J2SE/Desktop/jdic_assoc/JDICAssociations.zip)
假如你仅对源代码有兴趣的话,请查看压缩包中SRC文件夹内的文件。请注意:需要下载最新的JDIC库文件(https://jdic.dev.java.net),并且把这些库包含到NetBeans所建立的工程的运行库中,或者脱离于NetBeans的情况下编译与运行时的CLASSPATH中。
[1] [2]
