我想使用
java.nio.channels.FileChannel
从文件中逐行读取,就像BufferedReader#readLine()
一样。我需要使用java.nio.channels.FileChannel
而不是java.io
的原因是我需要在文件上放置一个锁,并从该锁文件逐行读取。因此,我被迫使用java.nio.channels.FileChannel
。请帮忙。
编辑这是我的代码尝试使用FileInputStream获取FileChannel:public static void main(String[] args){
File file = new File("C:\\dev\\harry\\data.txt");
FileInputStream inputStream = null;
BufferedReader bufferedReader = null;
FileChannel channel = null;
FileLock lock = null;
try{
inputStream = new FileInputStream(file);
channel = inputStream.getChannel();
lock = channel.lock();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String data;
while((data = bufferedReader.readLine()) != null){
System.out.println(data);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try {
lock.release();
channel.close();
if(bufferedReader != null) bufferedReader.close();
if(inputStream != null) inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
当代码执行到 lock = channel.lock();
这里时,它会立即进入 finally
块,此时 lock
仍然为 null
,所以执行 lock.release()
时会引发 NullPointerException
异常。我不确定为什么会这样。
FileInputStream
锁定文件时,它并不能很好地工作。 - Thang PhamFileInputStream
的代码,你能看一下吗? - Thang Pham