ファイルからの読み取りに使用java.nio.channels.FileChannel
したいのですが、同じように1行ごとに読み取りたいですBufferedReader#readLine()
。java.nio.channels.FileChannel
代わりに使用する必要があるのjava.io
は、ファイルにロックをかけ、そのロックファイルから1行ずつ読み取る必要があるためです。だから私は強制的に使用します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
ます。理由はわかりません。