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)
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.
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.
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.
Enable Full Disk AccessOpen System Preferences ▸ Security & Privacy. Select the Privacy tab. Select Full Disk Access, then click the lock icon.
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()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With