使用Java Swing打开Finder/Explorer

Roh*_*han 5 java macos desktop swing runtime

我正在创建一个应用程序,在该应用程序中,用户可以非常轻松地单击应用程序中的链接,从而在Finder(在Mac中)/ Windows资源管理器中打开特定文件夹.这可能发生在链接或按钮的单击事件上.

有没有办法可以通过Swing打开这些本机操作系统应用程序(针对特定文件夹)?

jav*_*arz 25

简答:

if (Desktop.isDesktopSupported()) {
    Desktop.getDesktop().open(new File("C:\\"));
}
Run Code Online (Sandbox Code Playgroud)

长答案: 虽然阅读它是什么操作系统然后运行特定于操作系统的命令会起作用,但它在某种程度上需要对需要完成的事情进行硬编码.

让Java处理每个操作系统应该如何打开目录.不应该是我们头疼的事.<3抽象.

阅读#open(File)方法文档可以看出它将打开支持该操作的所有操作系统上的链接.如果当前平台不支持打开文件夹或文件(比如说无头环境?当然,我猜测为什么它不会打开是猜测),它会抛出一个UnsupportedOperationException.如果用户无权读取该文件夹(Windows Vista/7/8,基于Unix的机器),您将获得一个SecurityException.所以,如果你问我,它处理得相当好.

更新:在获取Desktop对象之前添加了if检查,以便您的代码从#getDesktop()Java文档中提到的讨厌HeadlessExceptionUnsupportedOperationException异常中保存.

  • 如果JRE 1.6+可用,则为最简单的跨平台解决方案+1. (4认同)

Jak*_*lat 9

用于Runtime.getRuntime().exec("command here");在运行java的系统中执行命令.

对于explorer.exe,您只需将文件夹的绝对路径作为参数传递,例如

Explorer.exe "C:\Program Files\Adobe"
Run Code Online (Sandbox Code Playgroud)

在Mac OS X中,您可以使用以下open命令:

open /users/
Run Code Online (Sandbox Code Playgroud)

你可以找到如何检测你是哪个操作系统,因此要运行的代码,在这里.例如,如果您在Windows上,这将会很糟糕:

public static boolean isWindows() {

    String os = System.getProperty("os.name").toLowerCase();
    // windows
    return (os.indexOf("win") >= 0);

}
Run Code Online (Sandbox Code Playgroud)

  • JRE 1.5及更早版本的合理回落. (3认同)