gpt4 book ai didi

java - 如何使用 java.nio.channels.FileChannel 读取 ByteBuffer 实现类似 BufferedReader#readLine() 的行为

转载 作者:搜寻专家 更新时间:2023-11-01 03:44:15 27 4
gpt4 key购买 nike

我想使用 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();时,马上转到finallylock还是null,所以 lock.release() 产生 NullPointerException。我不确定为什么。

最佳答案

原因是你需要使用FileOutpuStream而不是FileInputStream。请尝试此代码:

        FileOutputStream outStream = null;
BufferedWriter bufWriter = null;
FileChannel channel = null;
FileLock lock = null;
try{
outStream = new FileOutputStream(file);
channel = outStream.getChannel();
lock = channel.lock();
bufWriter = new BufferedWriter(new OutputStreamWriter(outStream));
}catch(IOException e){
e.printStackTrace();
}

这段代码适合我。

NUllPointerException 实际上隐藏了真正的异常,即 NotWritableChannelException .对于锁定,我认为我们需要使用 OutputStream 而不是 InputStream。

关于java - 如何使用 java.nio.channels.FileChannel 读取 ByteBuffer 实现类似 BufferedReader#readLine() 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346278/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com