Java 存档
我使用我的应用程序访问服务器上保存的一些文件。多个用户可以登录到应用程序中,我想对其中一个用户打开的文件进行显式锁定,并希望在用户注销或停止使用该文件时释放锁定 怎么做有什么帮助吗Java 存档,java,Java,我使用我的应用程序访问服务器上保存的一些文件。多个用户可以登录到应用程序中,我想对其中一个用户打开的文件进行显式锁定,并希望在用户注销或停止使用该文件时释放锁定 怎么做有什么帮助吗 提前感谢您可以尝试使用FileLock。它们可能很难正确使用,但这可能是您唯一的选择。您可以尝试使用FileLock。他们可能很难做到正确,但这可能是您唯一的选择。您使用的是数据库吗?为什么没有一个表列出用户锁定的文件?然后可以通过插入/删除行来获取和释放锁 不要忘记一个管理员界面来释放被错误保留的锁。还要考虑实现一
提前感谢您可以尝试使用FileLock。它们可能很难正确使用,但这可能是您唯一的选择。您可以尝试使用FileLock。他们可能很难做到正确,但这可能是您唯一的选择。您使用的是数据库吗?为什么没有一个表列出用户锁定的文件?然后可以通过插入/删除行来获取和释放锁
不要忘记一个管理员界面来释放被错误保留的锁。还要考虑实现一种超时(即在XX小时后锁定不再有效)< /P> < P>是否使用数据库?为什么没有一个表列出用户锁定的文件?然后可以通过插入/删除行来获取和释放锁 不要忘记一个管理员界面来释放被错误保留的锁。也可以考虑实现一种超时(即在XX小时后锁定不再有效)< /P> < P>你可以试试这个:
try {
// Get a file channel for the file
File file = new File("filename");
FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
// Use the file channel to create a lock on the file.
// This method blocks until it can retrieve the lock.
FileLock lock = channel.lock();
// Try acquiring the lock without blocking. This method returns
// null or throws an exception if the file is already locked.
try {
lock = channel.tryLock();
} catch (OverlappingFileLockException e) {
// File is already locked in this thread or virtual machine
}
// Release the lock
lock.release();
// Close the file
channel.close();
} catch (Exception e) {
}
希望这对您有所帮助您可以尝试以下方法:
try {
// Get a file channel for the file
File file = new File("filename");
FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
// Use the file channel to create a lock on the file.
// This method blocks until it can retrieve the lock.
FileLock lock = channel.lock();
// Try acquiring the lock without blocking. This method returns
// null or throws an exception if the file is already locked.
try {
lock = channel.tryLock();
} catch (OverlappingFileLockException e) {
// File is already locked in this thread or virtual machine
}
// Release the lock
lock.release();
// Close the file
channel.close();
} catch (Exception e) {
}
希望这能帮助你度过难关。。。万一使用锁的人不释放锁怎么办?检查过了。。。如果使用锁的人没有释放锁怎么办?@UNNI-wat如果有人没有到达锁。release()文件是否会被释放我的意思是,如果用户会话过期或他关闭浏览器,在这些情况下会发生什么?我想你正在谈论的场景是文件已经被x用户锁定。在这种情况下,lock.release将不会执行,因为它将引发异常。现在讨论的会话范围是当用户在会话范围内时,您希望如何关联此文件处理机制。我认为只有当用户有效并放入会话时,您才会锁定该文件。在其他scanrio中,这段代码可能无法执行。此说明基于您的设计。第三件事是,当用户关闭浏览器时,您可以使用javascript捕获事件,并发送服务器端comand foraction@UNNI-wat,以防有人1未到达lock.release()文件是否会被释放我的意思是,如果用户会话过期或他关闭浏览器,在这些情况下会发生什么?我想你正在谈论的场景是文件已经被x用户锁定。在这种情况下,lock.release将不会执行,因为它将引发异常。现在讨论的会话范围是当用户在会话范围内时,您希望如何关联此文件处理机制。我认为只有当用户有效并放入会话时,您才会锁定该文件。在其他scanrio中,这段代码可能无法执行。此说明基于您的设计。第三件事是当用户关闭浏览器时,您可以使用javascript捕获事件并发送服务器端comand for Action