Java NIO-文件锁

本文介绍了Java NIO中的文件锁机制,包括共享锁和排它锁的概念及使用方法。通过示例代码展示了如何利用FileChannel获取文件锁,并强调了锁的释放与字节流模式的重要性。

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

一 前言

                当我们打开一个文件时,别的人也要访问,但是只有一个可以进行操作,这里操作的人获取了文件锁,完成了对文件的排他独占。Java NIO中则提供了文件锁,提供了对文件的共享访问或排它访问。分为共享锁,排它锁。其通过通道进行获得。然后设置对文件的文件锁类型。


二 文件锁

              文件锁分为共享锁,和互斥锁,通过字节流获得通道来实现,进行相应的互斥访问或排它访问。
             tryLock():获取文件排它锁,进行对文件的排它操作。
             tryLock(position,filelength(),true):获取文件锁模式,并指定文件锁,true:共享锁,false:排它锁。
             relase():释放文件锁

三  应用

package com.myd.cn.Nio;


import java.io.File;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;




/**
 * 文件锁:完成对文件的共享访问和排它访问
 * @author MAYADONG
 *
 */
public class FileLock01 {
public static void main(String[] args) throws  Exception {
         File read = new File("E:"+File.separator+"pay"+File.separator+"read.txt");
         
         //声明文件字节流变量,通道变量,文件锁
         FileOutputStream out = null;
         FileChannel fout = null;
         FileLock lock = null;
         
         //实例字节流,通道,文件锁对象
                 out= new FileOutputStream(read, true);  //字节输出流的模式为追加模式,否则文件内容会被清除
                 fout = out.getChannel();
              
                 //获取排它锁
                lock = fout.tryLock();
                //设置为文件锁为true为共享锁,false为排它锁,仅其获取锁失败会抛出异常, 
                 //tryLock(0,read.length(),true); 
                
              
                 if(lock != null){
             System.out.println("文件\t"+read.getName()+"  锁定300秒");
             Thread.sleep(30000);
             lock.release(); //释放文件锁
             System.out.println("文件\t"+read.getName()+"解除锁定");
              }
              
                  fout.close();
                  out.close();
        }
}

文件写入时要指定写入模式为true,否则破坏文件内容。文件锁获取后,在操作文件后要释放文件锁,避免资源占用

四 总结

                      文件锁匙通过字节流获得通道后,然后再用通道获取文件锁,指定文件锁模式。需要注意:字节写入流,需要指定字节流模式为true(追加模式)。另外在一些操作系统中,不支持文件共享锁,通过tryLock(0,read.length(),true); 可能会自动转换成排它锁。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值