无法写入自锁文件

时间:2017-11-16 17:20:09

标签: java file-locking

我有两个进程正在使用文件的情况。所以,如果文件已被锁定,我会检查我的进程,然后等到解锁。

一旦它被另一个进程解锁,我就把锁放开然后开始读取并写入文件。但我得到的错误如下。我知道它是一个错误,因为它被我锁定了,但是我想首先锁定文件然后开始读写,这样其他进程就无法使用它直到使用它。

Exchange

这是我的代码段

Exception in thread "main" java.io.IOException: The process cannot access the file because another process has locked a portion of the file

任何人都可以告诉我,我怎么能解决这个问题以及在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

这是你自己的FileLock导致了这个问题。您应该从FileLock中读取文件。

你应该这样读:

ByteBuffer buffer = ByteBuffer.allocate(20);
int noOfBytesRead = channel.read(buffer);

您可以找到更多信息here

如果你想要readline,你可以这样做:

FileInputStream fin = new FileInputStream(file);
if (FileEdit) {

    RandomAccessFile accessFile = new RandomAccessFile(file, "rw");
    FileChannel channel = accessFile.getChannel();

        FileLock lock = null;
        try {

            lock = channel.lock();
            System.out.println("Lock Status: " + lock.isValid());
            InputStream is = Channels.newInputStream(channel);
            BufferedReader read = new BufferedReader(new InputStreamReader(is, "UTF-8"));

            System.out.println(read.readLine());

        } catch (OverlappingFileLockException e) {
              System.out.println("File Lock Error: " + e.getMessage());
        }

        lock.close();

    }

提到here