[英]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.