2014-03-12 1 views
0

이 두 번째 파일에 하나 개의 파일의 복사 데이터의 코드char 배열로 데이터를 읽는 방법은 무엇입니까? 내 첫 번째 질문은</strong><br> 내가 문자 배열의 크기는 알고 싶어 <br> 67 <br> -1 <br> <strong>입니다

 public class Writer 
     { 
      public static void main(String args[]) throws IOException 
      { 
       File f=new File("D:/test.txt"); 
       FileReader fr=new FileReader(f); 
       char cbuff[]=new char[100]; 
       int c=fr.read(cbuff); 
       System.out.println(c); 
       c=fr.read(cbuff); 
       System.out.println(c); 
       fr.close(); 

       FileWriter fw=new FileWriter("D:/newTest.txt"); 
       fw.write(cbuff); 
       fw.close(); 
      } 
     } 

출력은 1000이면, read 메소드가 -1 초를 리턴하는 이유는 무엇입니까?

내 두 번째 질문은 Acc입니다. [자바 문서]에서 (http://docs.oracle.com/javase/7/docs/api/java/io/Reader.html#read%28java.nio.CharBuffer%29)

또는
-1 문자의 소스 말단


상기 라인의 의미는 무엇인가에 있는지?

답변

1

char 배열의 크기가 1000임을 알고 싶습니다. 왜 read 메서드가 -1 초를 반환하는지 알고 싶습니다.

입력 스트림에 더 이상 읽을 문자가 없기 때문에. 두 번째 읽기가있는 경우 이미 읽은 내용을 배열에 덮어 쓰게됩니다.

그리고 javadoc이 잘못된 방법을 가리키고 있습니다. the read() method taking a char[] as an argument을 사용합니다. CharBufferchar[]이 아닙니다!

마침내 (최근에 그런 주제에 관한 질문을했고 이미 말씀 드린 바 있습니다.) 파일을 읽고 쓰기 위해 사용하는 인코딩을 지정해야합니다.

+0

이 줄이 참이므로 "67 개의 문자 만 있기 때문에 전체 파일을 읽었으므로 다음에 커서가 파일의 끝에있을 때 -1을 반환하므로 다른 곳에서는 아무것도 남지 않습니다. 읽기 " – TruePS

+1

예, 그게 전부입니다. 또한 두 번째 읽기에 대해 내가 말한 것을 주목하십시오. 또한 현재 코드에서 대상 파일 _은 100 자 (인코딩에 따라 실제 크기)가되며 나머지 문자 67은 0으로 채워집니다. – fge

+0

ok이 줄의 의미가 무엇인지 지적한 읽기 방법의 경우 마지막으로 "이 문자의 끝이이 문자의 끝일 경우 – TruePS

1

이 할 때 만 67 문자를 가지고 있기 때문에 커서가 파일의 끝 부분에있을 것입니다 다음에 그래서 -1을 반환 있도록

fr.read(cbuff); 

, 당신은, 전체 파일을 읽었습니다. 다른 세상에서는 읽을 거리가 없습니다.

+0

괜찮 았지만,이 줄의 의미를 가리키는 읽기 방법의 경우 "또는이 문자의 원본이 끝 부분에있는 경우 -1" – TruePS

+1

이는 읽은 char 수를 반환한다는 것을 의미합니다. 파일 또는 완료된 읽기에 데이터가 없으면 -1을 리턴합니다. – Salah

1

첫 번째로 읽는 시간이 fr.read (cbuff)이면 파일에서 문자를 읽는 중이고 총 문자 수는 67이므로 67을 읽으면 다음 번에 커서가 파일 끝으로 이동합니다. EOF으로 -1을 반환합니다.