亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Java中復制文件而不鎖定原始文件

在Java中復制文件而不鎖定原始文件

狐的傳說 2022-05-25 17:42:21
我有一個包含 20 個文件的文件夾,從“myFile1.txt”到“myFile20.txt”。一個程序,我們稱之為“WRITER”,可能會寫入這些文件?,F在,我想使用Apache commons 的 FileUtils復制 Java 中的文件夾,更具體地說是FileUtils.copyDirectoryToDirectory()方法。但是,我擔心如果我使用該方法,我會在復制過程中鎖定文件,使得“WRITER”程序無法再寫入文件。有誰知道 FileUtils 中的方法是否鎖定了文件?復制時如何防止鎖定原始文件(如果是這樣的話)?謝謝!編輯:我正在使用 Windows
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

我的理解是,所有基于 Linux 的鎖本質上都是建議性的。調用者必須檢查鎖。從這個意義上說,這不是一個萬無一失的解決方案。由于重命名同一目錄中的文件是原子操作,因此最好的方法可能是將文件重命名為某個隨機名稱,復制到新目錄并刪除舊文件。

如果您可以控制文件的讀取者和寫入者,則可以使用 nio.FileChannel 和它提供的鎖定功能。讀取器和寫入器都必須在訪問之前檢查鎖。


查看完整回答
反對 回復 2022-05-25
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

我有一堆 Paradox DB 文件,我需要在不鎖定它們的情況下復制它們。我今天從https://www.baeldung.com/java-copy-file測試了這種方法。我使用了 256 * 1024 的緩沖區,因為我的測試產生了最佳速度。我用于測試的文件大約有 240 MB


public void givenIoAPI_whenCopied_thenCopyExistsWithSameContents(String original, String copied) 

  throws IOException {

    File original = new File(original);

    File copied = new File(copied);

    

    try (

      InputStream in = new BufferedInputStream(

        new FileInputStream(original));

      OutputStream out = new BufferedOutputStream(

        new FileOutputStream(copied))) {

 

        byte[] buffer = new byte[262144];

        int lengthRead;

        while ((lengthRead = in.read(buffer)) > 0) {

            out.write(buffer, 0, lengthRead);

            out.flush();

        }

    }

 

}


查看完整回答
反對 回復 2022-05-25
  • 2 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號