2011-05-01 2 views
1

미친 듯이 들리 겠지만 파일에서 읽는 중이고 파일의 첫 번째 줄을 건너 뛰는 것처럼 보입니다.파일 참고의 첫 번째 줄이 BufferedReader로 읽히는 이유는 무엇입니까?

무슨 일입니까?


    private void loadFile(String fileNPath) 
    { 
     StringBuilder currentFileContents = new StringBuilder(); 
     CharBuffer contentsBuffer = CharBuffer.allocate(65536); 

     int status=0; 
     try 
     { 
      BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 

      while(status!=-1) 
      { 
       status=in.read(contentsBuffer); 
       currentFileContents.append(contentsBuffer); 
       contentsBuffer.clear(); 
      } 

      System.out.println(currentFileContents.toString()); 
     } 
     catch(FileNotFoundException n) 
     { 
      //Should be imposible 
     } 
     catch(IOException n) 
     { 
      n.printStackTrace(System.out); 
     } 

    } 

그것은해야 뭔가 내가 이상 찾고 : 여기

는 소스입니다.

나는 정확한 소스를 복사하여 붙여 넣었으므로 이런 일이 발생하기를 바랍니다.

감사합니다, caalip

+0

저는 파일의 두 번째 줄만 가져옵니다. –

답변

0

내가 Fileutils의를 사용할 수 있습니다. 이 행을 한 줄로 된 readFileToString (파일).

그러나 텍스트 파일에 코드를 코드로 실행하면 모든 줄이 보입니다. 문제가 귀하의 코드와 관련이 없다고 생각합니다.

+0

당신은 아파치 공유 FileUtils 의미합니까? –

+0

예, 링크를 추가하고 메소드의 이름을 수정했습니다. –

1

이것은 조금 이상합니다. try 블록을 다음으로 변경해보십시오.

try 
    { 
     BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 

     status=in.read(contentsBuffer.array(), 0, 65536); 
     currentFileContents.append(contentsBuffer); 

     System.out.println(currentFileContents.toString()); 
    } 

이 코드는 실행하지 않았지만 한 번 사용해보십시오.

업데이트 : 코드를 실행하여 설명한 문제가 발생했습니다. 내 수정 코드를 실행하고 그것을 작동합니다.

+0

하지만 파일 크기가 너무 큰 경우 어떻게해야합니까? 이 논리가 효과가 있을까요? 당신이하고있는 일은 0에서 65536 사이의 파일을 읽는 것입니다. 그러나 그보다 더 큰 크기가 있다면 어떨까요? – Deepak

+0

얼마나 많은 문자를 읽어야하는지 CharBuffer에 할당 된 문자 수와 간단히 일치 시켰습니다. 파일이 크면이 방법이 적절하지 않습니다. – Zach

+0

루핑하는 동안 문제가 무엇입니까 ?? 어떤 생각있어? – Deepak

3

파일을 읽는 특별한 이유가 있습니까?

부모 클래스 메서드 (예 : BufferedReader에는 read(CharBuffer) 메서드가 없음)를 사용하고 있습니다 ... CharBuffer 자체가 조금 과장되었습니다. 나는 실제 문제가 용의자가 올바르게 사용하고 있지 않다는 것을 의심한다. (대개는 Buffer 객체를 뒤집어서 배수해야한다.) 그러나 이것을 조작하는 방법을보기 위해 더 많이 찌르면된다.

읽고 싶을 뿐이에요. 파일은 다음과 같습니다.

StringBuilder currentFileContents = new StringBuilder(); 
try 
{ 
    BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 
    String line = null; 
    while((line = in.readline()) != null) 
    { 
     currentFileContents.append(line); 
    } 

    System.out.println(currentFileContents.toString()); 
} 
catch(FileNotFoundException n) 
{ 
    //Should be imposible 
} 
catch(IOException n) 
{ 
    n.printStackTrace(System.out); 
} 
+0

한 번에 하나씩 데이터를 읽는 것이 더 느릴 것이라고 생각합니다. –

+0

음 ... 예 ... "조기 최적화 (premature optimization)"라고 불리우며 아마 잘못되었습니다. 이것이 바로 BufferedReader를 사용하는 이유입니다. –

관련 문제