私のアプリはこのコードを使用して 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 の場合) にインストールすると、上記のコードで次の例外が発生します。
デバイスをファイルに保存する例外: java.io.FileNotFoundException: devices.ser (アクセスが拒否されました)
ただし、C:/MyApp にインストールすると、すべて正常に動作します。
これは、C:/Program Files ディレクトリから継承された読み取り/書き込み許可と関係がありますか? C:/temp ディレクトリまたはそのような場所にファイルを作成することでこれを解決できる可能性があることはわかっていますが、それに頼る必要はありません。C:/Program Files/MyApp ディレクトリにファイルを読み書きできる方法はありますか?