两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

經(jīng)常出現(xiàn)幾個(gè)程序處理同一個(gè)文件的情景,比如同時(shí)更新或讀取文件。應(yīng)對(duì)這樣的問(wèn)題做出處理,否則可能發(fā)生混亂。JDK 1.4版本后,Java提供了文件鎖功能,可以幫助解決這樣的問(wèn)題。


FileLock和FileChannel類分別在java.nio和java.nio.channels包中。輸入、輸出流讀寫文件時(shí)可以使用文件鎖,以下結(jié)合RandomAccessFile類來(lái)說(shuō)明文件鎖的使用方法。


RandomAccessFile創(chuàng)建的流在讀寫文件時(shí)可以使用文件鎖,那么只要不解除該鎖,其他程序無(wú)法操作被鎖定的文件。


使用文件鎖的步驟如下:

1)先使用RandomAccessFile流建立指向文件的流對(duì)象,該對(duì)象的讀寫屬性必須是rw,例如:

RandomAccessFile input = new RandomAccessFile("Main.java","rw");

2)input流調(diào)用方法getChannel()獲得一個(gè)連接到底層文件的FileChannel對(duì)象(信道),例如:

FileChannel channel = input.getChannel();

3)信道調(diào)用tryLock()或lock()方法獲得一個(gè)FileLock(文件鎖)對(duì)象,這一過(guò)程也稱做對(duì)文件加鎖,例如:

FileLock lock = channel.tryLock();


文件鎖對(duì)象產(chǎn)生后,將禁止任何程序?qū)ξ募M(jìn)行操作或再進(jìn)行加鎖。對(duì)一個(gè)文件加鎖之后,如果想讀、寫文件必須讓FileLock對(duì)象調(diào)用release()釋放文件鎖,例如:

lock.release();


例如,Java程序通過(guò)每次單擊按鈕釋放文件鎖,并讀取文件中的一行文本,然后馬上進(jìn)行加鎖。當(dāng)Java程序運(yùn)行時(shí),用戶無(wú)法用其他程序來(lái)操作被當(dāng)前Java程序加鎖的文件,比如用戶使用Windows操作系統(tǒng)提供的“記事本”程序(Notepad.exe)無(wú)法保存被當(dāng)前Java程序加鎖的文件。


Main.java

import java.io.*;
public class Main {
    public static void main(String args[]) {
        File file = new File("Main.java");
        WindowFileLock win = new WindowFileLock(file);
        win.setTitle("使用文件鎖");
    }
}


WindowFileLock.java

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class WindowFileLock extends Jframe implements ActionListener {
    JTextArea text;
    JButton button;
    File file;
    RandomAccessFile input;
    FileChannel channel;
    FileLock lock;
    WindowFileLock(File f) {
        file = f;
        try {
            input = new RandomAccessFile(file,"rw");
            channel = input.getChannel();
            lock = channel.tryLock();
        }
        catch(Exception exp) {}
        text = new JTextArea();
        button = new JButton("讀取一行");
        button.addActionListener(this);
        add(new JScrollPane(text),BorderLayout.CENTER);
        add(button,BorderLayout.SOUTH);
        setSize(300,400);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void actionPerformed(ActionEvent e) {
        try {
            lock.release();
            String lineString = input.readLine();
            text.append("\n"+lineString);
            lock = channel.tryLock();
            if(lineString==null)
                input.close();
        }
        catch(Exception ee) {}
    }
}


點(diǎn)贊(0)

C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:

一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程

解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程

從零到寫出一個(gè)爬蟲的Python編程課程

只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運(yùn)行等待時(shí)間)