通过 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 10 (99) - 关联启动: 关联指定的文件类型, 关联指定的协议
在 MFC 中注册文件关联在 Windows 7 上不起作用