用于读写的 Java FileLock

2024-01-10

我有一个进程,会从 cron 中频繁调用来读取其中包含某些与移动相关的命令的文件。我的进程需要读取和写入此数据文件 - 并将其锁定以防止其他进程在此期间接触它。用户可以执行完全独立的过程来(可能)写入/附加到同一数据文件。我希望这两个进程能够正常运行,并且一次只访问一个文件。

nio FileLock 似乎是我所需要的(缺少编写我自己的信号量类型文件),但我在锁定它以进行读取时遇到问题。我可以很好地锁定和写入,但是当尝试在读取时创建锁定时,我收到 NonWritableChannelException。甚至可以锁定文件以供读取吗?似乎 RandomAccessFile 更接近我的需要,但我不知道如何实现它。

这是失败的代码:

FileInputStream fin = new FileInputStream(f);
FileLock fl = fin.getChannel().tryLock();
if(fl != null) 
{
  System.out.println("Locked File");
  BufferedReader in = new BufferedReader(new InputStreamReader(fin));
  System.out.println(in.readLine());
          ...

异常在 FileLock 行上引发。

java.nio.channels.NonWritableChannelException
 at sun.nio.ch.FileChannelImpl.tryLock(Unknown Source)
 at java.nio.channels.FileChannel.tryLock(Unknown Source)
 at Mover.run(Mover.java:74)
 at java.lang.Thread.run(Unknown Source)

看看JavaDocs,它说

尝试写入最初未打开用于写入的通道时引发未经检查的异常。

但我不一定需要写信给它。当我尝试创建 FileOutpuStream 等用于写入目的时,它很高兴,直到我尝试在同一文件上打开 FileInputStream 。


  1. 您是否知道锁定文件不会阻止其他进程接触它,除非它们也使用锁?
  2. 您必须通过可写通道锁定。通过a获取锁RandomAccessFile在“rw”模式下,然后打开FileInputStream。确保关闭两者!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于读写的 Java FileLock 的相关文章

随机推荐

  • 如何创建一个安全的 php 登录系统,允许“保持登录”功能?

    我使用基于会话变量的简单登录系统 用户登录后 就会设置一个会话变量 告诉我的脚本要接受用户 我不使用任何自定义客户端 cookie 变量 我想在登录屏幕上提供 让我全天登录 的选项 如何以一种安全的方式做到这一点 首先 配置session
  • 如何将 Ramda Pipe 函数与 Promise 和静态回调结合使用?

    基于 ScottSauyet 的帮助 https stackoverflow com questions 58362118 how to dynamically fill expand a 2d array using a callback
  • 驱动器盘符更改时从 USB 驱动器运行批处理文件

    因此 我制作了一个批处理脚本 它执行多个可移植程序 例如 prog1 exe prog2 exe 等 问题是每当我将 USB 驱动器连接到另一台计算机时 驱动器号就会发生变化 从而在运行 bat 文件时出现错误 请帮我找到解决方案 谢谢 d
  • Struts 2 中的数字格式不正确

    我正在使用以下语法以正确的数字格式显示值 例如1 250 00
  • 限制可变参数模板参数

    我们可以将可变参数模板参数限制为某种类型吗 即 实现这样的目标 当然不是真正的 C struct X auto foo X args 这里我的目的是有一个接受可变数量的函数X参数 我们最接近的是 template
  • 使用辅助方法为 Java 对象生成测试数据时提供默认值

    假设有以下 POJO Getter Setter public class UserRequest private String username private String password private String email 现
  • iPhone 的 JSON 库

    我想在我的 iPhone 项目中使用 JSON 库 我发现 json framework 库是目前最流行的 在这里能找到它 http code google com p json framework http code google com
  • 使用 Java 发送零数据 TCP/IP 数据包

    我的目标是发送一个带有空数据字段的 TCP 数据包 以便测试与远程计算机的套接字 我正在使用 OutputStream 类的 write byte b 方法 我的尝试 outClient ClientSocket getOutputStre
  • Angular ng 服务不在本地主机上托管站点

    当我跑步时ng serve在我的 CLI 上 我得到以下输出 Angular Live Development Server 正在监听 localhost 4200 打开浏览器 http localhost 4200 但是当我在浏览器中打开
  • azure devops 本地代理管道权限被拒绝

    我有一个 python 脚本 可以在远程 SUT 上执行自动化脚本 并且考虑到该脚本在使用用户 tester 和密码 xxx 在本地执行时正常工作 当我构建 DevOps Azure 管道时 我已从 GIT 将项目签出到代理中 然后尝试从命
  • PHP 中传递给 exec 的命令长度有限制吗?

    目前我需要将 50 多个 PDF 文件合并为 1 个 PDF 我正在使用 PDFTK 使用以下指南 http www johnboy com blog merge multiple pdf files with php http www j
  • 如何关闭hbm2ddl?

    我找不到有关如何关闭 hbm2ddl 的参考 只是省略hibernate hbm2ddl auto默认情况下 Hibernate 不执行任何操作 来自参考文档 1 1 4 休眠配置 http docs jboss org hibernate
  • Mysql 查询发布日期减去 7 天

    这不断出现错误 我不明白为什么 SELECT i user id FROM SELECT SUM us score AS score sum us user id FROM user scores us WHERE us created g
  • 特殊字符未按预期显示

    我有以下简单的 HTML 页面 div m ywe div 当在 Chrome 或 Firefox 中显示它时 我没有测试其他浏览器 我看到以下内容 m ywe 我错过了什么 html 文件以 UTF 8
  • 将 JSON 数据写入磁盘

    编写 JSON 数据 NSDictionary 并再次读取它的最简单方法是什么 我知道有 NSFileManager 但是有没有一个开源框架库可以使这个过程变得更容易 iOS5 NSJSONSerialization 类是否支持将数据写入磁
  • 带有 jquery 的 Django 模板:现有页面上的 Ajax 更新

    我有一个带有表单的 Google App Engine 当用户单击提交按钮时 将调用 AJAX 操作 服务器将输出一些内容并附加到其来源页面的末尾 怎么样 我有一个 Django 模板 我打算使用 jquery 我有以下观点 welcome
  • 传感器的本机模块不可用。 React-Native链接运行成功了吗?

    我遵循了第一步React Native教程在这里 https facebook github io react native docs getting started html https facebook github io react
  • 在 Primefaces 中的不同布局单元之间拖放

    我在全页 Primefaces 布局中有 4 个布局单元 我在西布局单元中有输出标签 我想将其拖放到中心布局单元 我想要将输出标签拖放到此处的拖放区域是 tabView 中的一个面板 当我开始拖动outputLabel时 它不会从西布局单元
  • Snakemake:如何记录由 script 指令执行的 python 脚本?

    有没有什么方法可以轻松保存来自snakemake规则执行python脚本的日志script指示 该脚本使用的库已经有一些集成的日志记录 我想存储它们的日志 我不想使用shell or run指令 因为在使用 python 脚本时它们都不太舒
  • 用于读写的 Java FileLock

    我有一个进程 会从 cron 中频繁调用来读取其中包含某些与移动相关的命令的文件 我的进程需要读取和写入此数据文件 并将其锁定以防止其他进程在此期间接触它 用户可以执行完全独立的过程来 可能 写入 附加到同一数据文件 我希望这两个进程能够正