使用java的java.nio.channels.FileLock,实现程序对文件的独占读写.

本文介绍了一种使用Java NIO中的FileLock机制实现文件独占访问的方法。通过创建一个锁定文件genFile.lck,并利用其进行文件锁操作,可以确保多线程环境下文件的安全访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在多线程的程序中,如果有一个共享文件要被访问或者编辑,如何实现文件的独占模式下的读写呢?

 

用java.nio.channels.FileLock是一个比较好的办法,实现的思路是先new一个名字genFile.lck的文件,

 

在通过getChannel().tryLock()方法返回一个FileLock. 如果是没有人访问,就会返回一个不为空的引用,

 

如果有人正在访问,则返回null,

 

这样就不会打开别人正在编写的文件了,

 

代码如下:

 

    private static final String GEN_LCK_FILE = "genFile.lck";

    private static FileLock genLock = null;

    public static void main(String args[]) {
       
        try {
            // Acquire an exclusive lock, assure manager is stand alone
            genLock = new FileOutputStream(GEN_LCK_FILE).getChannel().tryLock();

            if (null != genLock) {
                //open the file you want!
            } else {
                System.err.println("this file has been open but other person!");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != genLock) {
                try {
                    genLock.release();
                    // delete the lock file
                    new File(GEN_LCK_FILE).delete();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 

提示这里的genFile.lck只是提供加锁的文件,用它来判断文件是否被访问,真正要访问修改的文件在代码中

 

//open the file you want!

 

这一行处理!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值