データベース管理システムを使用する必要があるアプリケーションを (教育目的で) 作成しています (非常に原始的な独自の DBMS を作成しました。これはタスクの一部です)。また、アプリケーションが実行されているすべてのテーブルの内容が常に正しいことを確認したいと考えています。その目的のために、各ファイルを調べて必要なチェックを行うメソッドを作成しました。問題は、アプリケーションの起動時にこのメソッドを 1 回だけ呼び出し、ファイルへのアクセスを拒否して、プログラムの実行中に誰も内容を変更しないようにすることです。
私は次のアプローチを使用します。アプリケーションの起動時に、InputStreamReaderとOutputStreamWriterを初期化し、それらを保存して、アプリケーションが終了したときにのみ閉じます。
初期化メソッドの一部:
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file, true);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
this.tables.get(table).put("fis", fis);
this.tables.get(table).put("fos", fos);
this.tables.get(table).put("isr", isr);
this.tables.get(table).put("osw", osw);
閉じる方法:
try {
for(Map<String, Object> table_map: tables.values()) {
OutputStreamWriter osw = (OutputStreamWriter)table_map.get("osw");
InputStreamReader isr = (InputStreamReader)table_map.get("isr");
if (osw != null)
osw.close();
if (isr != null)
isr.close();
}
}
catch (IOException e) {
throw new DBException("Closing error");
}
MS メモ帳を使用してこれらのファイルのいずれかを変更しようとすると、次のエラーが表示されるため、部分的にはこのアプローチが機能します。
「別のプロセスで使用されているため、プロセスはファイルにアクセスできません」
それが私が見たいものです。しかし、Notepad++ を使用すると、アプリケーションの実行中に任意の変更を加えることができますが、それは私が期待するものではありません。では、他のプロセスが私のファイルを変更できないようにするにはどうすればよいでしょうか?
FileLockを使用しようとしましたが、間違っていなければ、自分のプロセスに対してのみアクセスが拒否されます。
私の拙い英語で申し訳ありませんが、とにかく私の質問を理解していただければ幸いです。