利用Java实现文件锁定功能

目录
  • 题目描述-文件锁定功能
    • 1.题目
    • 2.解题思路
    • 3.代码详解
  • 多学一个知识点

题目描述-文件锁定功能

1.题目

在操作文件时,有时会遇到一个问题:该文件已经被另一个程序占用,打开失败。这是因为另一个程序在编辑此文件。

实现:对D盘的xiaoxuzhu.txt文件进行锁定1分钟,1分钟后解锁。

2.解题思路

创建一个类:EncryptInput

使用FileChannel类的tryLock()获取文件锁定,如果没获取到文件锁,会返回null。可以通过这个返回值判断是否有没有被锁定。

FileLock 一般都是从FileChannel 中获取

FileLock 是文件锁,它能保证同一时间只有一个进程(程序)能够修改它,或者都只可以读,这样就解决了多进程间的同步文件,保证了安全性。但是需要注意的是,它进程级别的,不是线程级别的,他可以解决多个进程并发访问同一个文件的问题,但是它不适用于控制同一个进程中多个线程对一个文件的访问。这也是为什么它叫做 多进程文件锁,而不是 多线程文件锁

3.代码详解

EncryptInput类

package com.xiaoxuzhu;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileLock;

/**
 * Description:
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/3.1	    xiaoxuzhu		2022/5/3		    Create
 * </pre>
 * @date 2022/5/3
 */

public class EncryptInput {

    @SuppressWarnings("unused")
    public static void fileLock(String file) {
        FileOutputStream fous = null; // 创建FileOutputStream对象
        FileLock lock = null; // 创建FileLock对象
        try {
            fous = new FileOutputStream(file,true); // 实例化FileOutputStream对象

            lock = fous.getChannel().tryLock(); // 获取文件锁定
            if(lock==null){
                //不需要处理了
                return;
            }
            String str = "虚竹哥好帅";
            IoUtil.write(fous, CharsetUtil.UTF_8,Boolean.FALSE,str);
            Thread.sleep(60 * 1000); // 线程锁定1分钟
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(lock!=null){
                    lock.release();
                }
                System.out.println("文件解锁");
                IoUtil.close(fous);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("对 D://xiaoxuzhu1.txt 的文件进行锁定");
        // 创建文件对象
        String file = "D://xiaoxuzhu1.txt";
        // 调用文件锁定方法
        fileLock(file);
    }
}

EncryptInput2类:测试是否锁定了文件

package com.xiaoxuzhu;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileLock;

/**
 * Description:
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/3.1	    xiaoxuzhu		2022/5/3		    Create
 * </pre>
 * @date 2022/5/3
 */

public class EncryptInput2 {

    @SuppressWarnings("unused")
    public static void fileLock(String file) {
        FileOutputStream fous = null; // 创建FileOutputStream对象
        FileLock lock = null; // 创建FileLock对象
        try {
            fous = new FileOutputStream(file,true); // 实例化FileOutputStream对象

            lock = fous.getChannel().tryLock(); // 获取文件锁定
            if(lock==null){
                //不需要处理了
                System.out.println("没有获取到文件锁,此文件已被锁定");
                return;
            }
            String str = "虚竹哥57好帅";
            IoUtil.write(fous, CharsetUtil.UTF_8,Boolean.FALSE,str);
            Thread.sleep(60 * 1000); // 线程锁定1分钟
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(lock!=null){
                    lock.release();
                }
                IoUtil.close(fous);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("对 D://xiaoxuzhu1.txt 的文件进行锁定");
        // 创建文件对象
        String file = "D://xiaoxuzhu1.txt";
        // 调用文件锁定方法
        fileLock(file); 

    }
}

多学一个知识点

new一个FileOutputStream对象时,如果file文件内容本身存在,会清空数据。

new FileOutputStream(file);

如果不要清空数据,可以使用

= new FileOutputStream(file,true);

到此这篇关于利用Java实现文件锁定功能的文章就介绍到这了,更多相关Java文件锁定内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java实现文件批量重命名,移动和删除

    目录 一.题目描述-批量重命名 1.题目 2.解题思路 3.代码详解 二.题目描述-批量移动文件 1.题目 2.解题思路 3.代码详解 4.多学一个知识点 三.题目描述-批量删除tmp文件 1.题目 2.解题思路 3.代码详解 一.题目描述-批量重命名 1.题目 题目:在window操作系统中,支持对文件名重命名,但不支持批量重命名. 实现:做一个批量重命名的工具. 2.解题思路 创建一个类:RenameTool 使用RenameTool继承JFrame构建窗体 文件重命名的方法是使用File类

  • Java实现读取Jar文件属性的方法详解

    目录 一.题目描述-读取Jar文件属性 1.题目 2.解题思路 3.代码详解 一.题目描述-读取Jar文件属性 1.题目 做一个读取jar文件的内容和功能的工具. 2.解题思路 创建一个类:ReaderJarFrame 使用ReaderJarFrame继承JFrame构建窗体 在选择jar后,窗体的表格会显示其内容. 创建一个类:ReadJar ReadJar类实现读取功能 读取的逻辑:使用JarFile类与Enumeration接口. jarFile是Java提供的一个类,可以读取jar包中的

  • Java实现查找文件和替换文件内容

    目录 一.题目描述-查找指定类型的文件 1.题目 2.解题思路 3.代码详解 4.多学一个知识点 二.题目描述-用树型结构显示路径 1.题目 2.解题思路 3.代码详解 三.题目描述-查找并替换文件内容 1.题目 2.解题思路 3.代码详解 一.题目描述-查找指定类型的文件 1.题目 题目:在操作系统中,通过文件的扩展名来区别不同类型的文件 .实现根据用户输入的扩展名,列出指定文件夹内该类型文件的文件名,文件大小和修改时间. 2.解题思路 创建一个类:FilesList FilesList类继承

  • Java压缩文件操作详解

    目录 一.题目描述-压缩文本文件 1.题目 2.解题思路 3.代码详解 二.题目描述-压缩文件解压到指定文件夹 1.题目 2.解题思路 3.代码详解 三.题目描述-压缩所有子文件夹 1.题目 2.解题思路 3.代码详解 一.题目描述-压缩文本文件 1.题目 题目:使用文本压缩技术,可以节约磁盘空间,还便于管理. 实现:做一个压缩指定文件夹内的所有文本文件的工具. 2.解题思路 创建一个类:ZipTextFileFrame 使用ZipTextFileFrame继承JFrame构建窗体 压缩文件主要

  • Java实现大文件的分割与合并的方法详解

    目录 一.题目描述-合并多个文本文件 1.题目 2.解题思路 3.代码详解 二.题目描述-对大文件进行分割处理 1.题目 2.解题思路 3.代码详解 三.题目描述-分割后又再次合并 1.题目 2.解题思路 3.代码详解 4.多学一个知识点 一.题目描述-合并多个文本文件 1.题目 题目:做一个合并多个文本文件的工具. 2.解题思路 创建一个类:TextFileConcatenation 使用TextFileConcatenation继承JFrame构建窗体 读取文本文件时,用的是Buffered

  • 利用Java实现文件锁定功能

    目录 题目描述-文件锁定功能 1.题目 2.解题思路 3.代码详解 多学一个知识点 题目描述-文件锁定功能 1.题目 在操作文件时,有时会遇到一个问题:该文件已经被另一个程序占用,打开失败.这是因为另一个程序在编辑此文件. 实现:对D盘的xiaoxuzhu.txt文件进行锁定1分钟,1分钟后解锁. 2.解题思路 创建一个类:EncryptInput 使用FileChannel类的tryLock()获取文件锁定,如果没获取到文件锁,会返回null.可以通过这个返回值判断是否有没有被锁定. File

  • CI框架源码解读之利用Hook.php文件完成功能扩展的方法

    本文实例讲述了CI框架源码解读之利用Hook.php文件完成功能扩展的方法.分享给大家供大家参考,具体如下: 看了hook.php的源码,就知道CI使用hook来进行扩展的原理了. hook的基本知识 http://codeigniter.org.cn/user_guide/general/hooks.html CI中hook的使用经历了一个:开启hook,定义hook,调用hook,执行hook的过程. 手册中已经告知了开启.定义.调用的方法.那么hook的实现原理是啥呢. <?php if

  • 利用Java+OpenCV实现拍照功能

    由于项目需要拍照,看了好多的资料不是C语言的就是python,开始用的JavaCv但是有好多问题,所以改成了OpenCv 只能硬着上了,查了好的网上的资料,终于找到了 依赖jar包:只有一个OpenCv的jar包,可以直接从官网上下载 下面上代码 import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.Buffered

  • 通过Java实现文件断点续传功能

    目录 什么是断点续传 解决方案 效果演示 参考代码 前端 后端 什么是断点续传 用户上传大文件,网络差点的需要历时数小时,万一线路中断,不具备断点续传的服务器就只能从头重传,而断点续传就是,允许用户从上传断线的地方继续传送,这样大大减少了用户的烦恼. 解决上传大文件服务器内存不够的问题 解决如果因为其他因素导致上传终止的问题,并且刷新浏览器后仍然能够续传,重启浏览器(关闭浏览器后再打开)仍然能够继续上传,重启电脑后仍然能够上传 检测上传过程中因网络波动导致文件出现了内容丢失那么需要自动检测并且从

  • 利用Java实现天气预报播报功能

    目录 实验代码 WeatherState.java Weather.java WeatherForecast.java CloudyLittleState.java CloudyDayState.java HeavyRainState.java LightRainState.java 运行结果 实验代码 WeatherState.java package lab2; public interface WeatherState { public void showState(); } Weathe

  • 利用mmap实现文件拷贝功能

    利用mmap实现的一个文件拷贝例子,供大家参考,具体内容如下 /* * gcc -Wall -O3 -o copy_mmap copy_mmap.c */ #include < stdio.h > #include < stdlib.h > #include < string .h > /* for memcpy */ #include < strings.h > #include < sys / mman.h > #include < s

  • 利用java实现邮箱群发功能

    本文实例为大家分享了java实现邮箱群发的具体代码,供大家参考,具体内容如下 近来无事,在网上看了一些大牛文章,其中看到一篇比较好的,分享给大家! 下面是代码 邮箱实体 import java.io.Serializable; /** * 邮件实体类 */ public class Mail implements Serializable { /** * 序列号 */ private static final long serialVersionUID = -356221821416897524

  • 利用Java+MySQL实现附近功能实例

    前言 在移动互联网广泛发展的今天,APP开发成为许多企业进入移动互联网的首选,笔者开发了众多的APP,发现很多app都有这样一个功能,那就是获取附近的人,怎么样来获取附近的人呢?其实很简单,就是要时刻记录用户的坐标(经纬度)信息到数据库中,然后根据当前用户的坐标,搜索数据库中,和当前坐标位置在 一定范围内的所有用户. 其实对于那种地理位置不会变的两个主体之间的距离,最好是直接将结果静态化.也就是直接写死在配置里. 比如,找自己家附近的地铁站. 这种情况下,一般而言"家"这个主体是不会轻

  • java实现文件复制上传操作

    利用Java复制文件到处都可以用到,这里总结了一个类供大家参考.里面总共有两个方法: public static boolean copyFile(String srcFileName, String destFileName,boolean overlay); public static boolean copyDirectory(String srcDirName, String destDirName,boolean overlay) ; 其中: srcFileName 待复制的文件名 d

  • Java利用Phantomjs实现生成图片的功能

    今天,给大家分享一个Java后端利用Phantomjs实现生成图片的功能,同学们使用的时候,可以参考下! PhantomJS简介 首先,什么是PhantomJS? 根据官网介绍: PhantomJS is a command-line tool. -- 其实就是一个命令行工具. PhantomJS的下载地址: Windows:phantomjs-2.1.1-windows.zip Linux:phantomjs-2.1.1-linux-x86_64.tar.bz2;phantomjs-2.1.1

随机推荐