我正在编写一个应用程序(用于教育目的),它需要使用数据库管理系统(我自己编写了极其原始的 DBMS,这是任务的一部分)。而且我想确保在我的应用程序运行的任何时候,所有表的内容都是正确的。为此,我编写了方法,它查看每个文件并进行必要的检查。问题是我只想在应用程序启动并拒绝访问文件时调用此方法一次,以确保在我的程序运行时没有人更改其内容。
我使用以下方法。当应用程序启动时,我初始化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,但如果我没记错的话,它只会拒绝我的进程的访问。
对不起我的英语不好,希望你能理解我的问题。