浏览 5639 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-11
File file=new File("/root/test.txt"); try { FileInputStream fis=new FileInputStream(file); FileChannel fc=fis.getChannel(); fc.tryLock(); byte[] buf = new byte[1024]; StringBuffer sb=new StringBuffer(); while((fis.read(buf))!=-1){ sb.append(new String(buf)); buf=new byte[1024];//重新生成,避免和上次读取的数据重复 } System.out.println(sb.toString()); fc.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 可是,程序却总报出如下异常: Exception in thread "main" java.nio.channels.NonWritableChannelException at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:818) at java.nio.channels.FileChannel.tryLock(FileChannel.java:967) at chb.mail.Calendar_chb.main(Calendar_chb.java:22) 利用同样的方法在写文件时就没有问题,各位达人啊。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-12-11
你的Channel是由InputStream过来的,当然是NonWritable了。
|
|
返回顶楼 | |
发表时间:2006-12-11
Readonly 写道 你的Channel是由InputStream过来的,当然是NonWritable了。
将程序改动如下: fc.tryLock(0,Long.MAX_VALUE,true); 就不会有刚才的异常了。 可是传入的参数true表示可以共享,可是我要求不能共享,传入false的时候还会报出刚才一样的错误,为什么啊? 还有利用FileChannel真的可以给stream加锁吗? 我同时利用两个线程,一个往文件里写内容,一个线程读同一个文件的数据 我希望同一时间只有一个线程可以操作该文件,结果却并不如此,两个线程好像在同时运行 写的线程正在写的时候,读的线程却已经开始了读取文件内容,郁霉中,后面附有代码,看一眼啊,谢谢! |
|
返回顶楼 | |
发表时间:2006-12-11
关键我想问的是,有没好的方法来确定一个文件是否正在被某个线程使用?
|
|
返回顶楼 | |
发表时间:2006-12-12
似乎文件的共享锁或独占锁与操作系统有关
我在家里在windows环境下,完全可以给文件加锁 但是到了公司在linux下,FileChanel就没有作用了 |
|
返回顶楼 | |
发表时间:2006-12-13
基本问题已经解决,具体论述可以参看:
http://blog.csdn.net/hbcui1984/archive/2006/12/12/1440226.aspx |
|
返回顶楼 | |