我的applet在Windows 7上完美运行(在作为签名jar
部署到网页后在IDE和Firefox中都有效)但在OS X上运行时抛出FileNotFoundException (Permission denied)
(在IDE中都有)和Firefox)。
尝试使用新的FileOutputStream
fos
创建新的File
keyCopy
时发生异常:
InputStream is = this.getClass().getClassLoader().getResourceAsStream(sslKeyRingClass[0]);
if (is != null) {
keyCopy = new File("/" + sslKeyRingClass[0]);
FileOutputStream fos = new FileOutputStream(keyCopy);
byte[] buf = new byte[256];
int read = 0;
while ((read = is.read(buf)) > 0) {
fos.write(buf, 0, read);
}
fos.close();
is.close();
}
在删除显式文件分隔符/
后,它在Windows和OS X上的IDE(Eclipse)中都有效:
keyCopy = new File(sslKeyRingClass[0]);
但在部署为FileNotFoundException
时,会在Windows和OS X上抛出相同的jar
。
使用系统相关分隔符
keyCopy = new File(File.separator + sslKeyRingClass[0]);
提供与明确的' /';
我在Eclipse中使用带有AllPermission的策略文件,jar
使用有效的代码签名证书进行签名,并且清单具有Permissions: all-permissions
属性。
任何人都可以解释为什么抛出FileNotFoundException (Permission Denied)
并建议一个跨平台工作的解决方案吗?
答案 0 :(得分:1)
正如Andrew所建议的那样,使用user.home而不是“/”作为文件路径。最终的解决方案是使用“os.name”来确定用户操作系统,然后使用“user.home”来确定路径。这适用于Windows和Mac。