[英]How can I lock a file from within a Java application for all other processes on a operating system?
我有一個文件需要多次讀取。 我必須按順序打開 InputStream 到同一個文件。 現在我想知道只要 Java 應用程序的特定部分正在運行,是否可以為整個操作系統鎖定該文件?
我想防止3發生:
example.txt
example.txt
echo "foo" >> example.txt
)example.txt
據我了解java.nio.FileChannel
鎖只鎖定其他 JVM 應用程序對文件的訪問。
Java API 是java.nio.channels.FileLock
。 你說:
據我了解
java.nio.FileChannel
鎖只鎖定其他 JVM 應用程序對文件的訪問。
這種理解是不正確的。 從FileLock
的文檔中:
平台依賴
此文件鎖定 API 旨在直接映射到底層操作系統的本機鎖定設施。 因此,文件上的鎖應該對所有有權訪問該文件的程序可見,而不管這些程序是用什么語言編寫的[強調] 。
鎖是否真正阻止另一個程序訪問鎖定區域的內容取決於系統,因此未指定。 某些系統的本地文件鎖定設施僅僅是建議性的,這意味着程序必須協同遵守已知的鎖定協議以保證數據完整性。 在其他系統上,本地文件鎖是強制性的,這意味着如果一個程序鎖定了文件的某個區域,那么實際上會阻止其他程序以違反鎖的方式訪問該區域。 在其他系統上,本機文件鎖是建議性的還是強制性的,可以在每個文件的基礎上進行配置。 為了確保跨平台的行為一致和正確,強烈建議將此 API 提供的鎖用作建議鎖。
[...]
但是,正如您所看到的,鎖的確切性質是特定於平台的。
文件系統是操作系統/實現特定的 WRT“鎖定”,我的猜測是要可靠地做到這一點,您必須通過文件權限來做到這一點。
您沒有提供有關操作系統/文件系統類型的任何詳細信息,因此沒有具體答案。
如果有一種方法可以“鎖定”文件系統上的某些文件,我敢打賭,它不會是可移植的。
我有一個防止其他進程可以訪問此文件的想法是重命名它,直到您的應用程序完成。
1. Load the file and rename it. For example, example.txt to example.txt.tmp
2. Reading file example.txt.tmp from myApp.java
.....
6. Rename your file name back to the original one.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.