最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Java實(shí)現(xiàn)文件鎖定功能

 更新時間:2022年08月11日 15:22:11   作者:小虛竹and掘金  
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)文件鎖定功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

題目描述-文件鎖定功能

1.題目

在操作文件時,有時會遇到一個問題:該文件已經(jīng)被另一個程序占用,打開失敗。這是因?yàn)榱硪粋€程序在編輯此文件。

實(shí)現(xiàn):對D盤的xiaoxuzhu.txt文件進(jìn)行鎖定1分鐘,1分鐘后解鎖。

2.解題思路

創(chuàng)建一個類:EncryptInput

使用FileChannel類的tryLock()獲取文件鎖定,如果沒獲取到文件鎖,會返回null??梢酝ㄟ^這個返回值判斷是否有沒有被鎖定。

FileLock 一般都是從FileChannel 中獲取

FileLock 是文件鎖,它能保證同一時間只有一個進(jìn)程(程序)能夠修改它,或者都只可以讀,這樣就解決了多進(jìn)程間的同步文件,保證了安全性。但是需要注意的是,它進(jìn)程級別的,不是線程級別的,他可以解決多個進(jìn)程并發(fā)訪問同一個文件的問題,但是它不適用于控制同一個進(jìn)程中多個線程對一個文件的訪問。這也是為什么它叫做 多進(jìn)程文件鎖,而不是 多線程文件鎖。

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>
 * 修改記錄:
 * 修改后版本	        修改人		修改日期			修改內(nèi)容
 * 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; // 創(chuàng)建FileOutputStream對象
        FileLock lock = null; // 創(chuàng)建FileLock對象
        try {
            fous = new FileOutputStream(file,true); // 實(shí)例化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 的文件進(jìn)行鎖定");
        // 創(chuàng)建文件對象
        String file = "D://xiaoxuzhu1.txt";
        // 調(diào)用文件鎖定方法
        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>
 * 修改記錄:
 * 修改后版本	        修改人		修改日期			修改內(nèi)容
 * 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; // 創(chuàng)建FileOutputStream對象
        FileLock lock = null; // 創(chuàng)建FileLock對象
        try {
            fous = new FileOutputStream(file,true); // 實(shí)例化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 的文件進(jìn)行鎖定");
        // 創(chuàng)建文件對象
        String file = "D://xiaoxuzhu1.txt";
        // 調(diào)用文件鎖定方法
        fileLock(file); 
        
    }
}

多學(xué)一個知識點(diǎn)

new一個FileOutputStream對象時,如果file文件內(nèi)容本身存在,會清空數(shù)據(jù)。

new FileOutputStream(file); 

如果不要清空數(shù)據(jù),可以使用

= new FileOutputStream(file,true);

到此這篇關(guān)于利用Java實(shí)現(xiàn)文件鎖定功能的文章就介紹到這了,更多相關(guān)Java文件鎖定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java雪花算法的實(shí)現(xiàn)詳解

    Java雪花算法的實(shí)現(xiàn)詳解

    雪花算法(Snowflake)是一種分布式唯一ID生成算法,用于生成全局唯一的ID,使用雪花算法生成的ID通常是一個64位的整數(shù),可以根據(jù)需要進(jìn)行轉(zhuǎn)換和展示,在Java等編程語言中,可以使用相應(yīng)的庫或工具來生成雪花算法的ID,本文給大家介紹了Java雪花算法的實(shí)現(xiàn)
    2023-11-11
  • Java的內(nèi)存分配與回收策略詳解

    Java的內(nèi)存分配與回收策略詳解

    這篇文章主要介紹了Java的內(nèi)存分配與回收策略詳解,對象的內(nèi)存分配,就是在堆上分配,對象主要分配在新生代的 Eden 區(qū)上,少數(shù)情況下可能直接分配在老年代,分配規(guī)則不固定,取決于當(dāng)前使用的垃圾收集器組合以及相關(guān)的參數(shù)配置,需要的朋友可以參考下
    2023-08-08
  • 解決springboot application.properties server.port配置問題

    解決springboot application.properties server.port配置問題

    這篇文章主要介紹了解決springboot application.properties server.port配置問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot自定義轉(zhuǎn)換器用法詳解

    SpringBoot自定義轉(zhuǎn)換器用法詳解

    在SpringBoot中,轉(zhuǎn)換器用于將一個類型的值轉(zhuǎn)換為另一個類型,這在處理HTTP請求參數(shù)、響應(yīng)結(jié)果、表單數(shù)據(jù)等方面非常有用,SpringBoot提供了多種方式來定義和使用轉(zhuǎn)換器,本文給大家介紹了
    如何使用SpringBoot自定義轉(zhuǎn)換器,需要的朋友可以參考下
    2023-08-08
  • Netty源碼解析NioEventLoop創(chuàng)建的構(gòu)造方法

    Netty源碼解析NioEventLoop創(chuàng)建的構(gòu)造方法

    這篇文章主要介紹了Netty源碼解析NioEventLoopGroup之NioEventLoop創(chuàng)建的構(gòu)造方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法

    java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法

    今天小編就為大家分享一篇java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Java實(shí)現(xiàn)多級表頭和復(fù)雜表頭的導(dǎo)出功能

    Java實(shí)現(xiàn)多級表頭和復(fù)雜表頭的導(dǎo)出功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多級表頭和復(fù)雜表頭的導(dǎo)出功能的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • java實(shí)現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫

    java實(shí)現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫

    前面給大家介紹過使用javascript,php,c#,python等語言實(shí)現(xiàn)人民幣大寫格式化,這篇文章主要介紹了java實(shí)現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫的代碼,非常的簡單實(shí)用,分享給大家,需要的朋友可以參考下
    2015-04-04
  • SpringBoot集成slf4j日志配置的方法

    SpringBoot集成slf4j日志配置的方法

    本文主要介紹了SpringBoot集成slf4j日志配置的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • SpringData Repository接口用法解析

    SpringData Repository接口用法解析

    這篇文章主要介紹了SpringData Repository接口用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論

临海市| 麻城市| 汤原县| 博兴县| 楚雄市| 定陶县| 自治县| 山东省| 武义县| 盈江县| 虎林市| 临清市| 宜章县| 苏尼特右旗| 巨野县| 盖州市| 潜江市| 普安县| 浮山县| 郸城县| 三穗县| 宁强县| 牙克石市| 博白县| 霍城县| 常山县| 威信县| 太湖县| 卫辉市| 苍梧县| 黑河市| 托里县| 德安县| 陇西县| 逊克县| 麦盖提县| 象山县| 揭东县| 剑川县| 靖州| 阳泉市|