2013-01-07 14 views
2

我遇到以下问题:获取能够打开文件的编辑列表

我编写了一个应用程序,用户可以在其中打开一些特定的文件。 用户应该能够选择编辑器,他想要打开文件。

目前我与这片代码做:

public void open(String path) { 
    try { 
     if(new File(path).exists()) 
      Runtime.getRuntime().exec("notepad.exe " + path); 

    } catch (IOException e) { 

    } 
} 

如果我将改变这个编辑器ultraedit.exe例如,在运行时将无法打开它。

所以,现在我的问题,有什么办法,实现像open with函数窗口正在使用,并返回所有可能的编辑器为特定类型的文件? 文件的扩展将是百达.ini

+2

这有帮助吗? http://stackoverflow.com/questions/5197880/java-accessing-windows-open-with-list – Behe

+0

哇,我没有发现这个问题,它真的帮了很多。 在下面的评论中,这段代码确实是我想要的。 'rundll32.exe shell32.dll,OpenAs_RunDLL C:\ path \ to \ file.ext' – SomeJavaGuy

回答

1

一种方法(假设:并非所有的跨平台,但仅适用于Windows)是使用assocftype命令从cmd.exe列出与一个特定的文件类型关联的应用程序,也看到Utilising a file association in a Java application

这是两个步骤:首先,通过assoc得到扩展(.ini)文件类型(inifile),然后通过ftype查找相关的文件类型的可执行文件:

C:> cmd.exe /c assoc .ini 
.ini=inifile 

C:> cmd.exe /c ftype inifile 
inifile=%SystemRoot%\system32\NOTEPAD.EXE %1 

你可以通过Runtime.getRuntime().exec()启动这些命令并捕获输出流以获取关联的程序。

+0

好吧,这听起来不错,我会查找它 – SomeJavaGuy

+0

可能由@Behe提供的链接更有用,一个答案链接到http://stackoverflow.com/questions/1238991/open-with-dialog-in-java - 我不确定我的方法是否允许列出“打开方式...”菜单中显示的所有关联。它似乎只返回默认关联(由“打开”菜单使用) –

1

至于我能看到Runtime.exec()无法打开ultraedit.exe因为ultraedit.exe可能无法在您PATH环境点发现。

您需要检测ultraedit.exe的位置,然后用完整路径打开它。这应该工作。

+0

好的,但我应该如何处理编辑器,我可能不知道,但用户想与之合作? – SomeJavaGuy

+0

您可以实现一个像Windows这样的对话框,让用户能够告知ultraedit.exe的放置位置。您可以序列化这些信息并在需要这些信息时加载它。 – Stefan

0

在XP至少(我没有办法在目前检查的Win 7)安装的应用程序的路径可以在注册表中找到下

\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\<program name> 

为了更方便(便携)解决方案我会添加一个列出编辑器的配置文件和可执行文件的完整路径。

0

如果有的话,你可以尝试Desktop#open

启动关联应用程序来打开该文件。如果指定的 文件是一个目录,则启动当前平台的文件管理器 以打开它。