使用java的java.nio.channels.FileLock,實現程式對檔案的獨佔讀寫.

來源:互聯網
上載者:User

在多線程的程式中,如果有一個共用檔案要被訪問或者編輯,如何?檔案的獨佔模式下的讀寫呢?

 

用java.nio.channels.FileLock是一個比較好的辦法,實現的思路是先new一個名字genFile.lck的檔案,

 

在通過getChannel().tryLock()方法返回一個FileLock. 如果是沒有人訪問,就會返回一個不為空白的引用,

 

如果有人正在訪問,則返回null,

 

這樣就不會開啟別人正在編寫的檔案了,

 

代碼如下:

 

    private static final String GEN_LCK_FILE = "genFile.lck";

    private static FileLock genLock = null;

    public static void main(String args[]) {
       
        try {
            // Acquire an exclusive lock, assure manager is stand alone
            genLock = new FileOutputStream(GEN_LCK_FILE).getChannel().tryLock();

            if (null != genLock) {
                //open the file you want!
            } else {
                System.err.println("this file has been open but other person!");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != genLock) {
                try {
                    genLock.release();
                    // delete the lock file
                    new File(GEN_LCK_FILE).delete();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 

提示這裡的genFile.lck只是提供加鎖的檔案,用它來判斷檔案是否被訪問,真正要訪問修改的檔案在代碼中

 

//open the file you want!

 

這一行處理!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.