2

我想知道是否可以通过双击文件在我的程序中打开用java编写的文件?

例如:在我的桌面上有一个由我的程序构建的文件“test.dat”。如果我尝试打开这个文件,我的程序会出现并询问我想用那个文件做什么。

是否可以使用 java 实现该功能?

4

3 回答 3

4

操作系统决定了哪些应用程序与给定的扩展相关联。如果适合您,您可以配置您的操作系统以使用您的程序打开所有文件。 .dat或者创建一个快捷方式或一个启动器来告诉使用什么。

于 2013-04-23T07:54:11.280 回答
2

我明白你在问什么。您想知道如何获取从操作系统传递给您的应用程序的参数,然后调用您的打开文件方法。

您的 java 程序有一个类,该类具有一个 main 方法,该方法被调用以启动您的应用程序。此类在清单文件中列为 Main-Class:com.your.package.MainClass。方法签名看起来像:

public static void main(final String args[]) {

字符串数组 args[] 包含从命令行传递给程序的任何参数。当您告诉操作系统将文件与可执行文件相关联,然后双击该文件时,操作系统会将文件名(完整路径)作为此字符串数组中的第一个参数传递给可执行文件。棘手的部分是您不能只将文件扩展名与 jar 文件相关联,因为 jar 文件不是可执行文件。jar 文件实际上与 java.exe 或 javaw.exe 相关联。因此,要完成这项工作,您需要创建一个调用 java.exe 或 javaw.exe 的批处理文件(或取决于您的操作系统的 shell 脚本),将类路径设置为您的 jar 文件,运行主类,然后传递参数到你的程序。这就是如何在 Windows 上的批处理文件中完成的。

"C:\Program Files\Java\jre1.8.0_25\bin\javaw.exe" -cp C:\Path\To\Your\Jar\File.jar com.your.package.MainClass %1

然后,不是将 .dat 文件与 jar 文件相关联,而是将其与此批处理文件相关联。%1 将导致文件名作为 args[0] 传递给您的 MainClass,然后您可以将其传递给您的 openFile(arg[0]) 方法,瞧,文件已打开。您也不仅限于 %1。如果操作系统将多个文件传递给您的程序,例如,如果您选择了多个 .dat 文件,您可以拥有 %1 %2 %3 等。这将在 Unix shell 脚本中以类似的方式完成。

/usr/bin/javac -cp /Path/To/Your/Jar/File.jar com.your.package.MainClass %1
于 2015-01-19T09:38:49.927 回答
0

通过双击“打开”文件是 Windows 操作系统的一项功能,通过将文件扩展名映射到特定程序来控制。

如果要运行打包在jar文件中的 java 程序,则必须创建所谓的“可运行”jar 并将 jar 扩展名映射到名为javaor的程序javaw

于 2013-04-23T07:53:37.143 回答