我一直在用 Java 开发一些软件,这些软件将分发给 Windows 或 MacOS 使用。我目前正在 iMac 上编程(因为 Apple 的特定要求)。下面的方法是从资源中拖出一个帮助文件(.pdf),复制到本地,这样就可以在本地机器上显示了。
private void mHelpActionPerformed(java.awt.event.ActionEvent evt) {
String sourceFile = "resources/BRC2Help.pdf";
String destFile = "brc2help.pdf";
File f = new File (destFile);
if (!f.exists()) {
try {
URL url = ClassLoader.getSystemResource(sourceFile) ;
InputStream is = url.openStream();
OutputStream os = new FileOutputStream(destFile);
byte[] b = new byte[2048];
int length;
while ((length = is.read(b)) != -1) {
os.write(b, 0, length);
}
is.close();
os.close();
System.out.printf("loaded pdf file from resources: %d bytes\n",f.length());
} catch (IOException ex) {System.out.printf("loadPDF: %s\n",ex);}
} else {
System.out.printf("%s exists: %d bytes\n",destFile,f.length());
}
try {
if (f.exists()) {
f.setReadable(true);
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(f);
} else {
System.out.println("Awt Desktop is not supported!");
}
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(this,
String.format("%s\n",ex),
"Helpfile Problem?",
JOptionPane.ERROR_MESSAGE);
}
}
这一切在 Mac 上运行良好,但IOException
在 Windows 7 上运行良好:
java.io.IOException: Failed to open file:/C:/Program%20Files/BRC2/brc2help.pdf. Error message: Access denied.
知道这里出了什么问题吗?我尝试将 .pdf 文件复制到其他位置,但结果是一样的。