通过 Java 获取 Windows 文件关联

Posted

技术标签:

【中文标题】通过 Java 获取 Windows 文件关联【英文标题】:Get Windows files associations via Java 【发布时间】:2012-11-27 01:33:24 【问题描述】:

我认为这将是一项简单的任务,但是 . . . 我希望我的 Java 程序能够获取用户的 Windows 文件关联。 换句话说,我想知道用户使用什么来打开 .txt 文件、.cvs 文件等。 assoc 和 ftype 命令提供该信息,但不提供给用户。 换句话说,如果我将文本编辑器设置为 Notepad++, assoc 和 ftype 不显示它。它们改为显示系统默认值记事本。 看起来我必须从注册表中获取该信息,但我有两个问题。 1) 我不知道我想要提取的确切注册表项 (虽然我看过“reg query HKEY_CURRENT_USER、HKEY_CLASSES_ROOT 等) 2)我不知道如何从注册表中提取密钥。我见过提到JNI 但还没有弄清楚细节。 任何提示表示赞赏。

【问题讨论】:

您到底想达到什么目的? Desktop 可以通过在相关编辑器中为您打开文件来打开/编辑文件。你了解更多here 您使用的是什么版本的 Windows? 是的,java.awt.Desktop 似乎是我需要的。我正在使用 Windows 7,但想要跨平台的东西。 【参考方案1】:

在 Win7 中,您可以在

中找到每个文件扩展名的“类”*
HKLM\SOFTWARE\Classes\<extension>\(Default)

键。

例如,在我的机器上

HKLM\SOFTWARE\Classes\.txt

有一个(默认)键 txtfile

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

HKLM\SOFTWARE\Classes\txtfile

应该有...\shell\open\command的子路径

在我的系统上,

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

%SystemRoot%\system32\NOTEPAD.EXE %1

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

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

HKLM\SOFTWARE\Classes\

HKCU\Software\Classes\

话虽如此,如果可能的话,我喜欢 MadProgrammer 对您的应用程序的建议。

* 我确定“类”有更好的名称,我只是不知道。

【讨论】:

【参考方案2】:

看看 Eclipse 的 Program 类,应该是你想要的:http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Fprogram%2FProgram.html

如果您想启动程序,请使用桌面类(如 MadProgrammer 建议的那样)

【讨论】:

这比我想要的还要多。 "Program.launch("c:/trash/a.txt");"启动我喜欢的文本编辑器。非常感谢! 然而,虽然 Program.launch() 在 Eclipse 内部工作,但它似乎不适用于 Jar 文件。所以这是我的下一个任务。任何更多信息表示赞赏。 我认为您需要先进行一些初始化,然后才能使用 Program。能否在使用程序类之前先实例化一个 swt 显示? 看起来桌面 API (java.awt.Desktop) 比 SWT 更适合我。

以上是关于通过 Java 获取 Windows 文件关联的主要内容,如果未能解决你的问题,请参考以下文章

如何优雅地使用命令行设置windows文件关联

背水一战 Windows 10 (99) - 关联启动: 关联指定的文件类型, 关联指定的协议

java获取文件大小的方法

在 MFC 中注册文件关联在 Windows 7 上不起作用

如何从 Windows XP 的批处理文件中设置处理器关联?

msi文件无文件关联,右键打开方式找不到Windows&#174; 安装程序