2011-06-14 4 views
4

java.nio.channels.FileChannel을 파일에서 읽으 려하지만 BufferedReader#readLine()과 같이 한 줄에 한 줄씩 읽고 싶습니다. java.io 대신 java.nio.channels.FileChannel을 사용해야하는 이유는 파일에 잠금을 설정하고 해당 잠금 파일에서 한 줄씩 읽어야하기 때문입니다. 그래서 저는 java.nio.channels.FileChannel을 사용해야합니다. 그것이 바로 finallylock로 이동되고, 여기에 편집java.nio.channels.FileChannel을 사용하여 ByteBuffer로 읽는 방법 BufferedReader # readLine()과 같은 유사한 동작을 얻는 방법

내 코드는 코드가 여기에 lock = channel.lock(); 때되는 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(); 
     } 
    } 
} 

를 얻기 위해 FileInputStream에를 사용하려고 도와주세요 그래서 여전히 lock.release()null입니다 NullPointerException을 생성하십시오. 왜 그런지 모르겠습니다.

답변

1

이유는 FileInputStream 대신 FileOutpuStream을 사용해야한다는 것입니다. 이 코드를 시도하십시오 :

 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을 숨기고 있습니다. 잠금을 위해 우리는 InputStream 대신 OutputStream을 사용해야한다고 생각합니다.

+0

필자는 어떤 이유로 파일을 'FileInputStream'으로 잠그려고 할 때 잘 작동하지 않습니다. 확실하지 왜, –

+0

기억 나는 어떤 문제없이 .. 전에 이것을 사용했습니다. 무슨 일을하는지 알 수 있습니다. –

+0

@Suraj :'FileInputStream'을 사용하여 제 코드로 내 게시물을 업데이트했습니다. 한번보세요. –