Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存档_Java - Fatal编程技术网

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