2 回答

TA貢獻1829條經驗 獲得超4個贊
我的理解是,所有基于 Linux 的鎖本質上都是建議性的。調用者必須檢查鎖。從這個意義上說,這不是一個萬無一失的解決方案。由于重命名同一目錄中的文件是原子操作,因此最好的方法可能是將文件重命名為某個隨機名稱,復制到新目錄并刪除舊文件。
如果您可以控制文件的讀取者和寫入者,則可以使用 nio.FileChannel 和它提供的鎖定功能。讀取器和寫入器都必須在訪問之前檢查鎖。

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();
}
}
}
添加回答
舉報