相关疑难解决方法(0)

如何使用java锁定文件(如果可能)

我有一个使用FileReader打开文件的Java进程.如何防止另一个(Java)进程打开此文件,或者至少通知第二个进程该文件已被打开?如果文件是打开的(这解决了我的问题),这是否会自动使第二个进程获得异常,或者我是否必须在第一个进程中使用某种标志或参数显式打开它?

澄清:

我有一个Java应用程序,它列出了一个文件夹,并打开列表中的每个文件进行处理.它会逐个处理每个文件.每个文件的处理包括读取它并根据内容进行一些计算,大约需要2分钟.我还有另一个Java应用程序执行相同的操作,而是写入文件.我想要的是能够同时运行这些应用程序,所以场景就是这样的.ReadApp列出文件夹并找到文件A,B,C.它打开文件A并开始读取.WriteApp列出文件夹并找到文件A,B,C.它打开文件A,看到它是打开的(通过异常或任何方式)并转到文件B. ReadApp完成文件A并继续到B.它看到它是开放的,继续到C. WriteApp没有至关重要 当ReadApp读取同一文件时写入,反之亦然.它们是不同的过程.

java file-io

114
推荐指数
5
解决办法
16万
查看次数

如何使用linux flock命令阻止其他根进程删除文件?

我想阻止我的一个根进程删除某个文件.所以我遇到了flock命令,它似乎符合我的需要,但我没有得到它的语法.

如果我只指示共享锁,则它不起作用:
flock [-sxun][-w #] fd#

如果我添加一个超时参数,它仍然无法正常工作
fd#

它似乎是这样,它适合flock -s -w5 "./file.xml" -c "tail -3 ./file.xml"方式.
(这个fd#参数是什么?)

所以,我尝试了 使用和它工作,在./file.xml执行tail命令.但我想知道,锁定在命令之后结束还是在命令执行结束后持续5秒?我的主要问题是,如何防止另一个root进程删除linux中的文件?flock [-sxun][-w #] fd#
fd#

linux bash file-locking flock

9
推荐指数
3
解决办法
2万
查看次数

无法使用 java.nio.channels.FileLock 在 Linux 上锁定文件

我正在用 Java 创建一个应用程序,我只想运行一个实例。为此,我创建了一个文件并在我的应用程序运行时获得了一个锁。

我有以下代码适用于 Windows,但在 Linux 上失败:一旦我获得了一个锁而不解锁它,我可以获得另一个锁。

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class MyApp {

private static File f;
private static FileChannel channel;
private static FileLock lock;

public static void main(String[] args) {
    try {
        f = new File("RingOnRequest.lock");
        // Check if the lock exist
        if (f.exists()) {
            // if exist try to delete it
            f.delete();
        }
        // Try to get the lock
        channel = new RandomAccessFile(f, "rw").getChannel();
        lock = channel.tryLock();
        if(lock == null) …
Run Code Online (Sandbox Code Playgroud)

java linux filelock

4
推荐指数
1
解决办法
9926
查看次数

标签 统计

java ×2

linux ×2

bash ×1

file-io ×1

file-locking ×1

filelock ×1

flock ×1