Java 应用程序安装到 C :/Program Files - java. io.FileNotFoundException 时无法写入/读取序列化文件:(访问被拒绝)

标签 java serialization installation filenotfoundexception access-denied

我的应用程序使用此代码持久保存 ArrayList,以便在应用程序重新启动时可以调用它。

    private static void storeDevices() {
    // Object serialization
    try {
        FileOutputStream fos = new FileOutputStream("devices.ser");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(devices);
        oos.flush();
        oos.close();
    }
    catch(Exception e) {
        showAlert("Store Devices", "Exception storing devices to file: " + e);
    } 
}

当我从 Netbeans 运行时一切正常。我已将应用程序包装在安装程序中(使用 Launch4J 和 Inno Setup Compiler),当我将应用程序安装到 C:/Program Files/MyApp(在 Windows 7 上)时,上述代码出现以下异常:

Exception storing devices to file: java.io.FileNotFoundException: devices.ser (Access is denied)

但是,当我安装到 C:/MyApp 时,一切正常。

这是否与从 C:/Program Files 目录继承的读/写权限有关?我知道我也许可以通过在 C:/temp 目录或类似的地方创建文件来解决这个问题,但我不想诉诸于此。那么有什么方法可以在我的 C:/Program Files/MyApp 目录中写入/读取文件吗?

最佳答案

从 Windows Vista 开始,未经显式身份验证,任何应用程序都无法访问系统文件夹区域。 (像program-file/window32/等文件夹......) 对于已安装的应用程序,身份验证由 windows-installer 完成。

为了能够访问(读/写),您需要以管理员身份运行,或者需要更改这些文件夹的权限(不推荐)

关于Java 应用程序安装到 C :/Program Files - java. io.FileNotFoundException 时无法写入/读取序列化文件:(访问被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15680808/

相关文章:

Java Lambda 方法引用不起作用

java - 使用单个提交按钮发送下拉列表的多个值

java - EST 时间与夏令时的转换

json - 如何从 Node.js 发送 JSON 到 Flash

python - pip 如何知道 virtualenv 以及在哪里安装包

java - 如何减少数组的运行时间

c# - WebApi 中的 JSON.NET 序列化错误

serialization - protobuf 消息的分隔符是什么?

laravel - laravel/framework需要ext-mbstring

makefile - "make install"和 "make altinstall"之间的细节差异