我在我的程序中要读取一个文件的内容,在读取的时候有可能其他的程序(该程序不可修改)会对文件进行写操作。怎样才不会让进行写操作的程序访问这个文件时候被拒绝

polarishb 2008-04-21 03:39:12
我在我的程序中要读取一个文件的内容,在读取的时候有可能其他的程序(该程序不可修改)会对文件进行写操作。怎样才不会让进行写操作的程序访问这个文件时候被拒绝,或者说我的这个程序怎么保证2者间不出现冲突
...全文
336 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
q1531 2008-04-26
  • 打赏
  • 举报
回复
我个人觉得这个问题,除了修改程序使他们同步以外,就是把数据放到数据库里面。让数据库来同步。
polarishb 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 bestseal 的回复:]
文件锁阿
FileLock lock = new FileOutputStream("d:\\a.txt").getChannel().tryLock();
[/Quote]
我要的是非独占打开读取
怎么能去加锁呢
bestseal 2008-04-22
  • 打赏
  • 举报
回复
文件锁阿
FileLock lock = new FileOutputStream("d:\\a.txt").getChannel().tryLock();
jiazhengjing 2008-04-22
  • 打赏
  • 举报
回复
读取的程序一点都不能修改。
我想只能从文件入手了,监控它的状态,应该不简单,不懂。
polarishb 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 q1531 的回复:]
有些文件本身就没办法读取的,比如像SAM,NTUSER.DAT这样被锁定的文件。
[/Quote]
我上面说了,可以读取的,只是我在读取的时候原来的文件不能去写入了

所以我希望读取的时候以非独占方式读取
q1531 2008-04-22
  • 打赏
  • 举报
回复
有些文件本身就没办法读取的,比如像SAM,NTUSER.DAT这样被锁定的文件。
polarishb 2008-04-22
  • 打赏
  • 举报
回复
不知道
RandomAccessFile bfin=new RandomAccessFile(filename,"r");

这样行不行
polarishb 2008-04-22
  • 打赏
  • 举报
回复
我是可以读文件的,只是当我在读的时候原来那个程序无法写
所以要从现在这个程序入手,让他读的时候不独占打开文件
findself 2008-04-22
  • 打赏
  • 举报
回复
那只有看你那写的程序的写的方法加锁了没,如果没加,就直接读文件。
panxuan 2008-04-22
  • 打赏
  • 举报
回复
使用file.canWrite()判断。
polarishb 2008-04-22
  • 打赏
  • 举报
回复
没人解决的了么?
polarishb 2008-04-22
  • 打赏
  • 举报
回复
你看清要求啊,写文件的程序是不能改的
guoxiaopeng1982 2008-04-22
  • 打赏
  • 举报
回复
楼主他们说的线程同步就可以实现了,你用一个临时空间,临时空间的get和set方法必须是线程同步的,然后你写文件的线程调用set方法,你取文件的线程调用get方法………………这样就解决问题了………………
polarishb 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wopopo 的回复:]
这个可能是你得那个写的程序进行了独占锁定来写,或者它的写的方式不同导致的。
你可以尝试在那个写的程序打开工作的时候,copy这个文件的一个副本看看能否copy成功,如果能copy成功,那用普通的读取的方法还是可以read的
[/Quote]
那样不还是打开文件,然后一行行的读取里面的内容吗?和我读取不是一样
难道有其他复制txt的方法
wopopo 2008-04-22
  • 打赏
  • 举报
回复
这个可能是你得那个写的程序进行了独占锁定来写,或者它的写的方式不同导致的。
你可以尝试在那个写的程序打开工作的时候,copy这个文件的一个副本看看能否copy成功,如果能copy成功,那用普通的读取的方法还是可以read的
bestseal 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 polarishb 的回复:]
引用 21 楼 bestseal 的回复:
文件锁阿
FileLock lock = new FileOutputStream("d:\\a.txt").getChannel().tryLock();

我要的是非独占打开读取
怎么能去加锁呢
[/Quote]

非独占打开读取 ?不明白你什么需求。。。
oxoxo 2008-04-22
  • 打赏
  • 举报
回复
一高手说:用windows api/jni的方法可以
比方说,你可以设置这边往一个文件里写时,另一方也可以同时写
joejoe1991 2008-04-22
  • 打赏
  • 举报
回复
我感觉不能做到。
期待高手回答。。。。
findself 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 polarishb 的回复:]
我是可以读文件的,只是当我在读的时候原来那个程序无法写
所以要从现在这个程序入手,让他读的时候不独占打开文件
[/Quote]
应该-->所谓多线程是分时间片来执行的,也就是说在读的时候只有一个读的线程,等被调度后才让写的线程进入,只不过他们在同一个资源(对象)上操作,并不是“并行”的吧??!!
这是我的理解,不能解决楼主的问题,期待高手出现,学习学习。
polarishb 2008-04-21
  • 打赏
  • 举报
回复
前面说过了,写文件的那个程序是不可修改的
只能试试看现在读文件的这个程序怎样才能不独占打开呢
加载更多回复(11)
内容概要:本文系统介绍了利用相量测量单元(PMU)进行电力系统状态估计的技术原理与实现方法,并基于IEEE-14和IEEE-30标准节点系统完成了Matlab代码仿真。通过引入PMU提供的高精度同步相量数据,显著提升了状态估计的准确性与实时性,适用于现代智能电网的实时监控与动态分析。文中详细阐述了状态估计算法的核心流程,包括测量模型构建、雅可比矩阵计算及加权最小二乘法(WLS)求解过程,展示了在典型电力网络结构下的仿真效果与应用潜力。; 适合人群:具备电力系统分析基础知识和一定Matlab编程能力的高校研究生、科研人员以及从事电力系统自动化、智能电网监控等相关工作的工程技术人员。; 使用场景及目标:① 深入理解基于PMU的电力系统状态估计基本理论与关键技术;② 在Matlab平台上复现并调试IEEE标准系统的状态估计程序,用于教学演示、科研验证或工程项目前期技术论证;③ 为后续研究广域测量系统(WAMS)、实时状态监测与智能调度控制等高级应用提供算法基础与代码支撑。; 阅读建议:建议读者结合电力系统状态估计相关教材,按照文档逻辑顺序逐步运行和分析Matlab代码,重点掌握PMU量测建模、稀疏矩阵处理与迭代求解等关键环节,通过修改参数和拓扑结构加深对算法鲁棒性与适应性的理解。
节奏坦克V3-D数字播放器的固件升级主要通过将固件文件拷贝至TF卡,并在设备系统内选择升级完成。不同固件版本在音质表现上存在差异,用户可根据个人听感偏好选择升级或降级。 固件升级/降级通用步骤 ‌获取固件文件‌:从可靠来源下载所需版本的固件文件,通常为.UPT格式。‌ ‌准备TF卡‌:将TF卡通过读卡器连接至电脑,确保其为FAT32格式。将下载的.UPT固件文件拷贝至TF卡的‌根目录‌下。‌ ‌执行升级操作‌:将TF卡插入V3-D播放器。在播放器的系统设置菜单中找到“系统升级”或类似选项,选择从“TF卡”或“存储卡”进行升级,随后按屏幕提示完成操作。‌ ‌等待完成‌:升级过程中请勿断电或取出TF卡。设备升级完成后通常自动重启。 主要固件版本听感差异 不同固件版本对V3-D的声音调校有所不同,以下是基于用户反馈的概括: ‌1.2版本固件‌:声场相对开阔,声音弥散感较强,低频量感稍弱,整体听感更为通透。‌ ‌1.3版本固件‌:人声结像更靠前、贴耳,低频量感增强,但部分用户反馈声场规模感有所缩小,极高频略有削减,可能导致搭配某些耳机时齿音更明显。‌ ‌注意‌:固件升级或降级均存在一定风险,操作前请务必备份重要数据。部分用户反馈通过设备“网络升级”功能时可能出现校验失败的情况。‌ 3 若对当前版本满意,无需刻意升级。从1.0版本升级至1.2版本主要为功能优化与漏洞修复,无调音变化。‌

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧