私は、Windows または MacOS で使用するために配布される Java でいくつかのソフトウェアを開発しています。現在、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 ファイルを他の場所にコピーしようとしましたが、結果は同じです。