首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

FileLock跟NonWritableChannelException

2012-10-13 
FileLock和NonWritableChannelException?import java.io.BufferedReaderimport java.io.BufferedWriteri

FileLock和NonWritableChannelException

?

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.nio.channels.FileLock;

?

public class FileReaderLock {

public static void main(String[] args) throws Exception { ?

FileInputStream fos = new FileInputStream("file.txt"); ?

? ? ? ? //获取文件锁 FileLock 对象 ?

? ? ? ? FileLock fl = fos.getChannel().tryLock(); ?

?

? ? ? ? //下面两个都会报错

? ? ? ? FileOutputStream fos1 = new FileOutputStream("file.txt"); ?

// ? ? ? ?fos1.write(1);

? ? ? ? FileInputStream fis = new FileInputStream("file.txt");

// ? ? ? ?fis.read();

? ? ? //tryLock是尝试获取锁,有可能为空,所以要判断?

? ? ? ? if (fl != null) { ?

? ? ? ? ? ? System.out.println("Locked File"); ?

? ? ? ? ? ? Thread.sleep(100); ?

? ? ? ? ? ? fl.release();//释放锁 ?

? ? ? ? ? ? System.out.println("Released Lock"); ?

? ? ? ? } ?

? ? ? ? fos.close(); ?

? ? } ?

}



FileLock不能对只读Channel上锁。将 FileInputStream fis = new FileInputStream(file);改为RandomAccessFile raf = new RandomAccessFile(file, "rw");从RandomAccessFile获得通道就可以了。
但是RandomAccessFile速度比BufferedReader要慢非常多,测试的时候是100倍的速度差距

?

热点排行