欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

題目描述-文件鎖定功能

1.題目

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

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

2.解題思路

創(chuàng)建一個(gè)類(lèi):EncryptInput

使用FileChannel類(lèi)的tryLock()獲取文件鎖定,如果沒(méi)獲取到文件鎖,會(huì)返回null??梢酝ㄟ^(guò)這個(gè)返回值判斷是否有沒(méi)有被鎖定。

FileLock 一般都是從FileChannel 中獲取

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

3.代碼詳解

EncryptInput類(lèi)

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對(duì)象
        FileLock lock = null; // 創(chuàng)建FileLock對(duì)象
        try {
            fous = new FileOutputStream(file,true); // 實(shí)例化FileOutputStream對(duì)象
           
            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("對(duì) D://xiaoxuzhu1.txt 的文件進(jìn)行鎖定");
        // 創(chuàng)建文件對(duì)象
        String file = "D://xiaoxuzhu1.txt";
        // 調(diào)用文件鎖定方法
        fileLock(file); 
    }
}

EncryptInput2類(lèi):測(cè)試是否鎖定了文件

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對(duì)象
        FileLock lock = null; // 創(chuàng)建FileLock對(duì)象
        try {
            fous = new FileOutputStream(file,true); // 實(shí)例化FileOutputStream對(duì)象
           
            lock = fous.getChannel().tryLock(); // 獲取文件鎖定
            if(lock==null){
                //不需要處理了
                System.out.println("沒(méi)有獲取到文件鎖,此文件已被鎖定");
                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("對(duì) D://xiaoxuzhu1.txt 的文件進(jìn)行鎖定");
        // 創(chuàng)建文件對(duì)象
        String file = "D://xiaoxuzhu1.txt";
        // 調(diào)用文件鎖定方法
        fileLock(file); 
        
    }
}

多學(xué)一個(gè)知識(shí)點(diǎn)

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

new FileOutputStream(file); 

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

= new FileOutputStream(file,true);

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

相關(guān)文章

  • Java中如何動(dòng)態(tài)創(chuàng)建接口的實(shí)現(xiàn)方法

    Java中如何動(dòng)態(tài)創(chuàng)建接口的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java中如何動(dòng)態(tài)創(chuàng)建接口的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • SpringBoot 如何優(yōu)雅的實(shí)現(xiàn)跨服務(wù)器上傳文件的示例

    SpringBoot 如何優(yōu)雅的實(shí)現(xiàn)跨服務(wù)器上傳文件的示例

    這篇文章主要介紹了SpringBoot 如何優(yōu)雅的實(shí)現(xiàn)跨服務(wù)器上傳文件的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2006-11-11
  • Mac配置 maven以及環(huán)境變量設(shè)置方式

    Mac配置 maven以及環(huán)境變量設(shè)置方式

    這篇文章主要介紹了Mac配置 maven以及環(huán)境變量設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java 字符串截取的實(shí)例詳解

    java 字符串截取的實(shí)例詳解

    這篇文章主要介紹了java 字符串截取的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Java自帶消息隊(duì)列Queue的使用教程詳細(xì)講解

    Java自帶消息隊(duì)列Queue的使用教程詳細(xì)講解

    這篇文章主要介紹了Java自帶消息隊(duì)列Queue的使用教程,Java中的queue類(lèi)是隊(duì)列數(shù)據(jù)結(jié)構(gòu)管理類(lèi),在它里邊的元素可以按照添加它們的相同順序被移除,隊(duì)列通常以FIFO的方式排序各個(gè)元素,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 關(guān)于properties配置文件的加密方式

    關(guān)于properties配置文件的加密方式

    這篇文章主要介紹了關(guān)于properties配置文件的加密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Spring中的循環(huán)依賴(lài)詳解

    Spring中的循環(huán)依賴(lài)詳解

    這篇文章主要介紹了Spring中的循環(huán)依賴(lài)詳解,  Spring 框架是一個(gè)流行的Java應(yīng)用程序框架,它提供了許多強(qiáng)大的功能,如依賴(lài)注入和面向切面編程,然而在使用 Spring 框架時(shí),我們可能會(huì)遇到循環(huán)依賴(lài)的問(wèn)題,需要的朋友可以參考下
    2023-09-09
  • springBoot快速訪問(wèn)工程目錄下的靜態(tài)資源

    springBoot快速訪問(wèn)工程目錄下的靜態(tài)資源

    springboot工程,是沒(méi)有webapp文件夾的,靜態(tài)文件放在src/main/resources/static文件夾下即可,模板文件放在src/main/resources/templates下,本文給大家介紹springBoot快速訪問(wèn)工程目錄下的靜態(tài)資源的相關(guān)知識(shí),一起看看吧
    2021-06-06
  • Java?super關(guān)鍵字的使用詳解

    Java?super關(guān)鍵字的使用詳解

    java中的super關(guān)鍵字是一個(gè)引用變量,用于引用直接父類(lèi)對(duì)象,下面這篇文章主要給大家介紹一下super關(guān)鍵字的使用,需要的朋友可以參考下
    2022-07-07
  • 使用Java實(shí)現(xiàn)簡(jiǎn)單串口通信

    使用Java實(shí)現(xiàn)簡(jiǎn)單串口通信

    這篇文章主要介紹了使用Java實(shí)現(xiàn)簡(jiǎn)單串口通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論