Я хочу использовать 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
. Я не уверен почему.