处理文件的锁定部分(Java)

时间:2011-02-16 12:19:07

标签: java locking

多年来我一直把头发拉出来!

尝试锁定文本文件(“test.txt”),然后从文本文件中读取一行并释放锁定。

我收到以下错误:

“错误:java.io.IOException:进程无法访问该文件,因为另一个进程已锁定文件的一部分”

请参阅下面的代码:

public static void main(String [] args)抛出异常{

    File file = new File("test.txt");
    FileInputStream in = new FileInputStream(file);
    DataInputStream dis = new DataInputStream(in);


    FileChannel channel = new RandomAccessFile("test.txt", "rw").getChannel();

    try{
        FileLock lock = channel.tryLock();

        System.out.println("Data: " + dis.readLine());

        lock.release();
    }catch(Exception ex){
        System.out.println("Err: "+ex);
    }
    in.close();
}

似乎进程在进入读操作之前锁定文件?

对不起我的无知,没有长时间使用Java,我一直试图在其他地方寻找解决方案。

提前致谢!

2 个答案:

答案 0 :(得分:0)

试试这个:

RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");
FileChannel channel = raf.getChannel();

// .. do locking here ...

// wrap DataInputStream around existing, locked connection
DataInputStream dis = new DataInputStream(new FileInputStream(raf.getFD()));
System.out.println("Data: " + dis.readLine());

// .. do unlocking here ...

答案 1 :(得分:0)

你还可以放置

  

lock.release();

中的

try
{

} catch (Exception e)
{
if (lock != null )
     lock.release();
}

因为在访问文件时抛出了IOException,所以不会释放文件锁。