初学者关于读写文件加锁 基础问题一点 报占用一点小疑惑 百思不得其解 求解答

TS败类 2018-09-03 11:00:43
package interview_prepared;

import java.io.File;

//实现文件读写加锁

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class FileReadWrite
{

public static void main(String[] args) throws IOException, InterruptedException
{
//String path = Thread.currentThread().getContextClassLoader().getResource("F:\\java\\java_code\\review\\ReadFile.java").getPath();
File file = new File("F:\\java\\java_code\\review\\ReadFile.java");
try
{

FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream("writehere.txt");
FileChannel fcin = fis.getChannel();
FileChannel fcout = fos.getChannel();
FileLock flin = null;
while(true){
try {
flin = fcin.tryLock();
break;
} catch (Exception e) {
System.out.println("有其他线程正在操作该文件,当前线程休眠1000毫秒");
Thread.sleep(1000);
}

}
ByteBuffer bbuffin = ByteBuffer.allocate(32);


while(fcin.read(bbuffin)!= -1)
{
bbuffin.flip();
FileLock flout = fcout.tryLock();
fcout.write(bbuffin);
flout.release();
System.out.println(bbuffin);
bbuffin.clear();
}
flin.release();
fos.close();
fis.close();

}
catch (FileNotFoundException e)
{

e.printStackTrace();
}


}

}

上面是我本人的程序 那天偶然看见有人说读写文件加锁的问题 我就自己写了一个 发现有错误 一直提示 读文件加锁加不上,一直卡其他进程占用 注释掉读文件部分之后 发现写文件可以加锁加上,不知道是什么问题,想请教一下大家。下面给出控制台 拜托啦 谢谢 谢谢
...全文
305 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2018-09-14
  • 打赏
  • 举报
回复
请参阅 https://zhidao.baidu.com/question/548094490.html 大神解释的很清楚。
以下是部分说明参考。
FileChannel也可以从FileInputStream中直接获得,但是这种直接获得FileChannel的对象直接去操作FileLock会报异常NonWritableChannelException,需要自己去实现getChannel方法。

就是因为一直报异常,所以你程序显示一直被占用。
verejava 2018-09-04
  • 打赏
  • 举报
回复
TS败类 2018-09-04
  • 打赏
  • 举报
回复
引用 1 楼 verejava的回复:
并发编程 之 锁 Lock

http://www.verejava.com/?id=17236703718463
你好 谢谢能解答疑问 我看了你的连接 还是不大理解 这个是文件锁 channel的lock 读文件通道加锁为什么会报占用呢 能细节一点解答吗 谢谢了 真的不理解 问了一下身边人也不懂 谢谢 谢谢

62,628

社区成员

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

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