OS X上的Java Applet - FileNotFoundException(权限被拒绝)

时间:2015-11-06 16:16:45

标签: java macos file applet filenotfoundexception

我的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)并建议一个跨平台工作的解决方案吗?

1 个答案:

答案 0 :(得分:1)

正如Andrew所建议的那样,使用user.home而不是“/”作为文件路径。最终的解决方案是使用“os.name”来确定用户操作系统,然后使用“user.home”来确定路径。这适用于Windows和Mac。