gpt4 book ai didi

java - 拒绝所有其他进程访问文件?

转载 作者:行者123 更新时间:2023-11-30 07:21:41 25 4
gpt4 key购买 nike

我正在编写一个应用程序(用于教育目的),它需要使用数据库管理系统(我编写了我自己的非常原始的 DBMS,这是任务的一部分)。而且我想确保在我的应用程序运行的任何时候所有表的内容都是正确的。为此,我编写了方法,它查看每个文件并进行必要的检查。问题是我只想在应用程序启动时调用此方法一次并拒绝访问文件以确保在我的程序运行时没有人更改其内容。

我使用以下方法。当应用程序启动时,我初始化 InputStreamReaderOutputStreamWriter,存储它们并仅在我的应用程序终止时关闭它们。

部分初始化方法:

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 记事本修改这些文件中的任何一个时,我收到以下错误

"The process cannot access the file because it is being used by another process"

这就是我想看到的。但是如果我使用 Notepad++,我可以在我的应用程序运行时进行任何修改,这不是我期望看到的。那么我该怎么做才能确保没有其他进程可以修改我的文件?

我尝试使用 FileLock,但如果我没记错的话,它只会拒绝我的进程访问。

抱歉我的英语不好,希望你能理解我的问题。

最佳答案

我不确定这是一个值得解决的问题。无论您采用何种方法,拥有正确权限的人都可能会撤消您的文件保护,并且无论如何都可以进行更改。

最好专注于优雅地处理无效数据,否则请相信文件中的内容。添加某种完整性检查(每行或每表)将使某人更难意外或恶意更改您的数据,使其看起来“有效”。

关于java - 拒绝所有其他进程访问文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com