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 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()});
精彩评论