Excel如何設(shè)置動(dòng)態(tài)求和 Excel設(shè)置動(dòng)態(tài)求和方法
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); } }
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)容。