第57題】輸入、輸出系列5-文件鎖定功能

      網(wǎng)友投稿 669 2025-04-01

      回城傳送–》《JAVA筑基100例》


      文章目錄

      零、前言

      一、題目描述

      二、解題思路

      三、代碼詳解

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

      四、推薦專欄

      五、示例源碼下載

      零、前言

      今天是學(xué)習(xí) JAVA語言 打卡的第57天,每天我會(huì)提供一篇文章供群成員閱讀( 不需要訂閱付錢 ),讀完文章之后,按解題思路,自己再實(shí)現(xiàn)一遍。在小虛竹JAVA社區(qū) 中對(duì)應(yīng)的 【打卡貼】打卡,今天的任務(wù)就算完成了。

      因?yàn)榇蠹叶荚谝黄饘W(xué)習(xí)同一篇文章,所以有什么問題都可以在群里問,群里的小伙伴可以迅速地幫到你,一個(gè)人可以走得很快,一群人可以走得很遠(yuǎn),有一起學(xué)習(xí)交流的戰(zhàn)友,是多么幸運(yùn)的事情。

      學(xué)完后,自己寫篇學(xué)習(xí)報(bào)告的博客,可以發(fā)布到小虛竹JAVA社區(qū) ,供學(xué)弟學(xué)妹們參考。

      我的學(xué)習(xí)策略很簡單,題海策略+ 費(fèi)曼學(xué)習(xí)法。如果能把這100題都認(rèn)認(rèn)真真自己實(shí)現(xiàn)一遍,那意味著 JAVA語言 已經(jīng)筑基成功了。后面的進(jìn)階學(xué)習(xí),可以繼續(xù)跟著我,一起走向架構(gòu)師之路。

      一、題目描述

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

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

      二、解題思路

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

      使用FileChannel類的tryLock()獲取文件鎖定,如果沒獲取到文件鎖,會(huì)返回null。可以通過這個(gè)返回值判斷是否有沒有被鎖定。

      FileLock 一般都是從FileChannel 中獲取

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

      三、代碼詳解

      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 * *

       * 修改記錄: * 修改后版本 修改人 修改日期 修改內(nèi)容 * 2022/5/3.1 xiaoxuzhu 2022/5/3 Create * 
      * @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); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      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 * *

       * 修改記錄: * 修改后版本 修改人 修改日期 修改內(nèi)容 * 2022/5/3.1 xiaoxuzhu 2022/5/3 Create * 
      * @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("沒有獲取到文件鎖,此文件已被鎖定"); 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); } }

      【第57題】輸入、輸出系列5-文件鎖定功能

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

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

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

      new FileOutputStream(file);

      1

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

      = new FileOutputStream(file,true);

      1

      四、推薦專欄

      《JAVA從零到壹》

      《JAVA從零到壹》第八講:系統(tǒng)常用類

      《Hutool實(shí)戰(zhàn)》7hutool實(shí)戰(zhàn):FileUtil 文件工具類(100多個(gè)文件常用操作方法)

      五、示例源碼下載

      關(guān)注下面的公眾號(hào),回復(fù)筑基+題目號(hào)

      筑基57

      Java 任務(wù)調(diào)度

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:高校協(xié)同育人項(xiàng)目平臺(tái)建設(shè)(高校協(xié)同育人項(xiàng)目平臺(tái)建設(shè)情況匯報(bào))
      下一篇:如何查找更多的文字體(如何查找文字的字體)
      相關(guān)文章
      亚洲av综合色区| 国产成人精品曰本亚洲79ren| 最新亚洲成av人免费看| 国产成人高清亚洲一区久久| 亚洲中文字幕乱码熟女在线| 亚洲成aⅴ人片在线影院八| 亚洲精品自在线拍| 亚洲性色高清完整版在线观看| 99久久精品国产亚洲| 久久综合亚洲色HEZYO社区| 久久综合亚洲色HEZYO社区| 亚洲综合一区二区| 亚洲欧洲精品久久| 亚洲丰满熟女一区二区v| 亚洲深深色噜噜狠狠网站| 在线亚洲午夜片AV大片| 亚洲欧美日韩中文高清www777| 亚洲日韩AV一区二区三区四区| 亚洲av无码一区二区三区四区| 亚洲a∨国产av综合av下载| 精品国产亚洲一区二区三区在线观看| 日韩欧美亚洲国产精品字幕久久久| 亚洲aⅴ无码专区在线观看春色 | 91麻豆国产自产在线观看亚洲| 国产亚洲精品自在线观看| 亚洲女初尝黑人巨高清| 久久精品国产亚洲av四虎| 亚洲精彩视频在线观看| 亚洲av无码一区二区三区观看| 亚洲熟女精品中文字幕| 欧美亚洲国产SUV| 中文字幕亚洲专区| 久久久久亚洲av无码专区蜜芽| 久久av无码专区亚洲av桃花岛| 亚洲伊人久久大香线焦| 亚洲人成色在线观看| 亚洲高清无码在线观看| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲AV无码日韩AV无码导航| 亚洲熟妇无码爱v在线观看| 久久亚洲国产成人影院|