通过Java获取Windows文件关联

通过Java获取Windows文件关联,java,windows,registry,associations,Java,Windows,Registry,Associations,我以为这是一项简单的任务,但是。 我想让我的Java程序获取用户的Windows文件关联。 换句话说,我想知道用户使用什么打开.txt文件、.cvs文件等。 assoc和ftype命令提供该信息,但不提供给用户。 换句话说,如果我将文本编辑器设置为Notepad++, assoc和ftype不显示它。它们显示的是系统默认设置,即记事本。 看起来我必须从注册表中获取这些信息,但我有两个问题。 1我不知道要提取的确切注册表项 虽然我已经看过了reg查询HKEY_当前用户、HKEY_类根等等。 我不知

我以为这是一项简单的任务,但是。 我想让我的Java程序获取用户的Windows文件关联。 换句话说,我想知道用户使用什么打开.txt文件、.cvs文件等。 assoc和ftype命令提供该信息,但不提供给用户。 换句话说,如果我将文本编辑器设置为Notepad++, assoc和ftype不显示它。它们显示的是系统默认设置,即记事本。 看起来我必须从注册表中获取这些信息,但我有两个问题。 1我不知道要提取的确切注册表项 虽然我已经看过了reg查询HKEY_当前用户、HKEY_类根等等。 我不知道如何从注册表中取出密钥。我看过JNI提到的 但是还没有弄清楚细节。
欢迎提供任何提示。

在Win7中,您可以在

HKLM\SOFTWARE\Classes\<extension>\(Default)
具有默认密钥txtfile

在同一路径中,您可以找到打开txtfile类文件的内容:

其子路径应为…\shell\open\command

在我的系统中

HKLM\SOFTWARE\Classes\txtfile\shell\open\command\(Default)

您可以对其进行分析以找到打开.txt文件的可执行文件

对于用户特定的自定义设置,可以替换

HKLM\SOFTWARE\Classes\

尽管如此,如果可能的话,我喜欢MadProgrammer的建议


*我确信类有一个更好的名称,我只是不知道。

看看Eclipse的程序类,它应该符合您的要求:


如果您想启动该程序,请使用程序员建议的桌面类

您到底想实现什么?可以通过在关联编辑器中为您打开文件来打开/编辑文件。您了解了更多您使用的Windows版本吗?是的,java.awt.Desktop似乎正是我需要的。我用的是Windows7,但我想要的是跨平台的。这比我想要的还要多。Program.launchc:/trash/a.txt;启动我首选的文本编辑器。非常感谢!然而,尽管Program.launch可以在Eclipse内部工作,但它似乎不能在Jar文件中工作。这就是我的下一个任务。任何更多的信息谢谢。我想你们需要一些初始化程序才能使用。在使用程序类之前,您能尝试实例化swt显示吗?桌面API java.awt.Desktop似乎比swt更适合我。
HKLM\SOFTWARE\Classes\txtfile\shell\open\command\(Default)
%SystemRoot%\system32\NOTEPAD.EXE %1
HKLM\SOFTWARE\Classes\
HKCU\Software\Classes\