我有10个文本文件,用于存储记录。在我的应用程序中,我有几个操作,例如写入文件和编辑文件(如果找到指定的行我创建一个临时文件并在那里传输所有信息,然后删除旧的并重命名临时文件)。
我的所有客户都可以访问10个文本文件,因此我希望同步他们的活动以保持数据的一致性。
如果客户端正在编辑或写入,我想锁定或同步文件,比如说f1.txt,所以没有其他人可以编写/编辑它,并允许其他客户端同时编辑f2.txt来增加并发性。 / p>
public void writeToFile(String pathname){
File f1 = new File(pathname)
synchronize (f1) {.. // do something}
}
我的问题是每次使用特定路径创建一个新文件。
请您为此提供任何指导和帮助。
由于
答案 0 :(得分:3)
如果我理解正确,您希望在特定文件路径上进行同步(并且文件系统不会以您喜欢的方式强制执行此操作)。你是对的File
对象不起作用。您需要同步的是文件的名称。
public void writeToFile(String pathname){
File f1 = new File(pathname)
synchronize (f1.getCanonicalPath().intern()) {.. // do something}
}
getCanonicalPath
方法将为引用相同路径的任何两个String
对象返回相同的File
值。例如,如果../logs/mylog.txt
和/var/spool/logs/mylog.txt
是同一个文件,则它们将具有相同的规范路径。
intern
方法为具有相同String
的任意两个value
对象返回相同的引用。因此,您最终锁定的是该文件的规范路径的单例实例。
我认为这符合您的需求。