# 使用文件关联

> 原文： [https://docs.oracle.com/javase/tutorial/deployment/selfContainedApps/fileassociation.html](https://docs.oracle.com/javase/tutorial/deployment/selfContainedApps/fileassociation.html)

向用户提供自包含应用程序的一个优点是能够设置文件关联。可以根据 MIME 类型或文件扩展名将特定类型的文件与您的应用程序相关联，以便您的应用程序用于打开相关文件。例如，如果应用程序编辑文本文件，则可以在用户双击扩展名为`.txt`的文件时设置运行应用程序的文件关联。

文件关联演示读取 JavaScript 和 Groovy 代码。使用 MIME 类型和文件扩展名，应用程序与 JavaScript 和 Groovy 文件相关联。

您可以从[自包含应用程序示例](../selfContainedApps/examplesIndex.html)下载文件关联演示的源文件。

## 设置文件关联

用于生成自包含应用程序包的 Ant 任务位于文件关联演示的`build.xml`文件中。 `&lt;fx:association&gt;` Ant 元素用于将文件扩展名或 MIME 类型与您的应用程序相关联。 Linux 捆绑包需要 MIME 类型，Windows 捆绑包需要文件扩展名，而 OS X 捆绑包至少需要其中一个属性。最好将这两个属性与 MIME 类型和文件扩展名之间的一对一映射一起使用，这使您可以在多个平台上使用相同的构建文件。参见[&lt; fx：association&gt;](https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/javafx_ant_task_reference.html#JSDPG997) 了解有关此元素的更多信息。

以下代码显示了`fx:deploy`元素中需要包含哪些内容以将应用程序与扩展`.js`和`.groovy`以及 MIME 类型`text/javascript`和`text/x-groovy`相关联。

```
<fx:info title="File Association Demo"
         vendor="MySamples"
         description="A Demo of File Associations for Java Packager"
         category="Demos"
         license="3 Clause BSD">
    <fx:association extension="js" mimetype="text/javascript" description="JavaScript Source"/>
    <fx:association extension="groovy" mimetype="text/x-groovy" description="Groovy Source"/>
</fx:info>

```

如果 bundler 不支持文件关联，则忽略关联。从 JDU 的 8u40 版本开始，Windows EXE 和 MSI 捆绑包，Linux DEB 和 RPM 捆绑包以及 Mac .app 捆绑器支持文件关联。 OS X PKG 和 DMG 捆绑器通过使用 Mac .app 捆绑器支持文件关联。

有关完整的构建代码，请参见 [`build.xml`](examples/packager_FileAssociations/build.xml) 。

要为文件关联演示生成可安装的软件包，请参阅[转换现有应用程序](../selfContainedApps/converting.html)中的“生成软件包”部分。

## 从关联文件启动

当用户系统上安装了独立应用程序包时，安装程​​序将设置文件关联。安装应用程序后，打开与您的应用程序关联的文件会导致您的应用程序启动。启动应用程序所采取的操作取决于运行它的平台。

### 在 Linux 和 Windows 上启动

在 Linux 和 Windows 上，当基于文件关联启动应用程序时，打开的文件将作为参数传递给主类，这将覆盖类的默认参数。对于文件关联演示，在启动应用程序实例后，参数将传递给`loadscript`方法。为每个打开的文件启动不同的应用程序实例。

有关 Linux 和 Windows 版本的代码，请参阅 [`ScriptRunnerApplication.java`](examples/packager_FileAssociations/src/sample/fa/ScriptRunnerApplication.java) 。

### 在 OS X 上启动

在 OS X 上，仅运行单个应用程序实例。打开关联文件时，会向应用程序发送一个事件。应用程序必须注册一个事件侦听器来处理该事件。

OS X 的文件关联演示有一个子类，其主方法与 Linux 和 Windows 的版本不同。此 main 方法以与 Linux 和 Windows 版本的 main 方法相同的方式处理默认参数，然后为`FileOpenHandler`注册 OS X 的侦听器。打开关联文件时将调用此侦听器的事件方法，并从`OpenFilesEvent`对象的`getFiles`方法中提取文件名。

有关 OS X 版本的代码，请参阅 [`ScriptRunnerApplicationMac.java`](examples/packager_FileAssociations/src/sample/fa/ScriptRunnerApplicationMac.java) 。

构建 OS X 版本的 File Association Demo 需要访问 Oracle JDK 附带的 OS X 特定类。大多数`com.apple.eawt`类不包含在`javac`编译器使用的符号文件中。要告诉编译器忽略符号文件，`-XDignore.symbol.file=true`参数将传递给构建文件中`-pre-init` Ant 任务中的`javac`编译器。参见 [`build.xml`](examples/packager_FileAssociations/build.xml) 。

## 有关文件关联演示的更多信息

File Association Demo 的项目包含`/src/sample/fa`目录中应用程序的 Java 源文件。自定义图标在 `/ src / package / `平台`` 目录中提供。与应用程序打包在一起的示例文件位于`/src`目录中。

要处理 Groovy 代码，文件关联演示需要 Groovy 库。构建过程将 Groovy 库下载到`/lib`目录。有关信息，请参见[添加外部库](../selfContainedApps/addlibrary.html)。

生成 JAR 文件后，构建过程将`/src`和`/lib`目录复制到`/dist`目录。然后`/dist`目录包含应用程序的所有文件。

文件关联演示将文件名作为参数。如果通过打开关联文件启动应用程序，则传入关联文件的名称。如果直接启动应用程序，则传入与应用程序捆绑在一起的示例文件`sample.js`。请参阅[提供默认参数](../selfContainedApps/defaultarg.html)以获取信息。

设置文件关联需要管理员权限。默认情况下，Windows 的 EXE 安装程序不会请求管理员权限。要强制请求文件关联演示的管理员权限，bundle 参数`win.exe.systemWide`设置为`true`。此设置表示执行了系统范围的安装，这需要管理员权限。

文件关联演示在 Linux，OS X 和 Windows 上运行。该演示设置为使用包含所有平台信息的单个构建文件。有关信息，请参见[使用所有平台的通用构建文件](../selfContainedApps/commonbuild.html)。

## 其他资源

有关文件关联的更多信息，请参阅[将文件与自包含应用程序关联](https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#JSDPG996)。

有关 JavaFX Ant 参数的更多信息，请参见 [JavaFX Ant 任务参考](https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/javafx_ant_task_reference.html)。