开发者

Java: Open a file (Windows + Mac) [duplicate]

开发者 https://www.devze.com 2023-03-27 22:09 出处:网络
This question already has answers here: Closed 11 years ago. Possible Duplicate: How to launch the default (native) application for a given file from Java?
This question already has answers here: Closed 11 years ago.

Possible Duplicate:

How to launch the default (native) application for a given file from Java?

I have a java applicat开发者_Go百科ion that opens a file. This works perfect on windows, but not on mac.

The problem here is that I use the windows configuration to open it. The code is:

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file);

Now my question is what is the code to open it in mac? Or is there another way to open a PDF that works multi platform?

EDIT:

I created the file as followed:

File folder = new File("./files");
File[] listOfFiles = folder.listFiles();

in a loop i add them to an array:

fileArray.add(listOfFiles[i]);

If i try to open a file from that array with Desktop.getDesktop().open(file), it says it can't find that file (the path is messed up because I used './files' as folder)


Here is an OperatingSystem Detector:

public class OSDetector
{
    private static boolean isWindows = false;
    private static boolean isLinux = false;
    private static boolean isMac = false;

    static
    {
        String os = System.getProperty("os.name").toLowerCase();
        isWindows = os.contains("win");
        isLinux = os.contains("nux") || os.contains("nix");
        isMac = os.contains("mac");
    }

    public static boolean isWindows() { return isWindows; }
    public static boolean isLinux() { return isLinux; }
    public static boolean isMac() { return isMac; };

}

Then you can open files like this:

public static boolean open(File file)
{
    try
    {
        if (OSDetector.isWindows())
        {
            Runtime.getRuntime().exec(new String[]
            {"rundll32", "url.dll,FileProtocolHandler",
             file.getAbsolutePath()});
            return true;
        } else if (OSDetector.isLinux() || OSDetector.isMac())
        {
            Runtime.getRuntime().exec(new String[]{"/usr/bin/open",
                                                   file.getAbsolutePath()});
            return true;
        } else
        {
            // Unknown OS, try with desktop
            if (Desktop.isDesktopSupported())
            {
                Desktop.getDesktop().open(file);
                return true;
            }
            else
            {
                return false;
            }
        }
    } catch (Exception e)
    {
        e.printStackTrace(System.err);
        return false;
    }
}

Answer to your edit:

Try to use file.getAbsoluteFile() or even file.getCanonicalFile().


At first, anything related to *.dll is windows-ish.

Perhaps you could try the code below for Linux, it can possibly also work on MAC:

import java.awt.Desktop;
import java.io.File;

Desktop d = Desktop.getDesktop();  
d.open(new File("foo.pdf"))


You need to look at the command open so have

Runtime.getRuntime().exec("/usr/bin/open " + file);

Edit by Martijn
This is better, when you use spaces in your file path:

Runtime.getRuntime().exec(new String[]{"/usr/bin/open", file.getAbsolutePath()});
0

精彩评论

暂无评论...
验证码 换一张
取 消