Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

I have a java application 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)

like image 641
Tjekkles Avatar asked Aug 11 '11 10:08

Tjekkles


People also ask

How to duplicate a file using Java?

Apache Commons IO Another common way to copy a file with Java is by using the commons-io library. The latest version can be downloaded from Maven Central. Then, to copy a file we just need to use the copyFile() method defined in the FileUtils class. The method takes a source and a target file.

How to read and Copy a file in Java?

Here is the method that can be used to copy a file using FileChannel. Apache Commons IO FileUtils. copyFile(File srcFile, File destFile) can be used to copy file in java.

How to Copy file from one location to another in Java?

1) The Files. copy() should be a standard way to copy a file from one folder to another if you are working in Java 7 and Java 8. 2) For copying files in Java 6, you can either write your own code using FileChannel, FileInputStream or can leverage Apache Commons IO.

How do I give Java full disk on Mac?

Enable Full Disk AccessOpen System Preferences ▸ Security & Privacy. Select the Privacy tab. Select Full Disk Access, then click the lock icon.


1 Answers

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().

like image 119
Martijn Courteaux Avatar answered Nov 03 '22 15:11

Martijn Courteaux