2012-12-18 1 views
0

다음 프로그램은 String "Humpty Dumpty가 벽에 있었고 \ Humpty Dumpty가 큰 폭으로 떨어졌습니다."라고 인쇄해야합니다. 파일에 저장하고 다시 입력하십시오.FileInputStream을 사용하는 파일 입력이 제대로 작동하지 않습니다.

package io; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.PrintStream; 

public class ByteIO { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     String output = "Humpty Dumpty sat on a wall,\n Humpty Dumpty had a great fall."; 
     System.out.println("Output String : " + output); 
     try(PrintStream out = new PrintStream("F:\\Test.txt")) { 
      out.println(output); 
     } catch(FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

     String input = ""; 
     try(FileInputStream in = new FileInputStream("F:\\Test.txt")) { 
      while(in.read() != -1) 
       input += (char)in.read(); 
     } catch(FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 
     System.out.println("Input String : " + input); 
    } 
} 

그러나, 나는이 FileInputStream에서 얻은 String "는 nawl는 upyDmt Ra로 알을 upyDmt?"이었다! 또한, "Test.txt"파일을 열면 출력이 String이되어 "Humpty Dumpty가 벽에 앉아서 Humpty Dumpty가 큰 가을을 보았습니다." 한 줄에. \n은 어디로 갔습니까?

while(in.read() != -1) 
    input += (char)in.read(); 

이 두 문자 하나가 아닌 각각의 반복을 읽고, 그래서 당신은 효과적으로 캐릭터마다 폐기됩니다

+1

\ n은 있지만 편집자가 표시하지 않을 수도 있습니다. 당신의 입력에 관해서 : 매 2 번째 문자 만 전달하는 한 당신의 루프는 망가져 있습니다. – Ingo

+0

파일을 쓰거나 읽는 사이에는 파일을 닫아야합니다. –

+0

@JavaNewbie는 해결책을 찾았을 때 항상 대답을 수락합니다. – Ravi

답변

0

에 코드를 변경해야 말했듯이

4

당신은 두 번 in.read()을 요구하고있다.

편집 : 두 번째 부분, 윈도우 (많은 애플리케이션의 경우 JavaNewbie_M107의 의견

int i;  
while((i = in.read()) != -1) 
    input += (char)i; 
+0

당신의 코드에서의 문제는'char'c가 결코 -1을 리턴하지 않을 것이고, 대신 0을 계속 리턴 할 것이고 따라서 무한 루프를 설정합니다. –

+0

@ JavaNewbie_M107 당신은 절대적으로 옳았습니다. 나는 편집을 할 것이다. –

1

에 따라

후 바로 input에 해당 문자를 추가하는 동안 상태에서 문자를 저장하십시오 메모장처럼) \ n을 새 줄로 인식하지 못합니다. Windows에서 \ r \ n은 새로운 행을 표시합니다. 더 심각한 편집 프로그램으로 열어보십시오 (워드 패드로 충분). 그러면 형식이 올바르게 표시됩니다.

int i = 0; 
char c; 
    do { 
     c = (char)i; 
     input += c; 
     i = in.read(); 
    } while(i != -1); 

전면에 여분의 공간이를 사용하여 제거 : 헌터, 당신이 내 문제에 대한 올바른 해결책이

char c; 
while((c=in.read()) != -1) 
input += c; 
+0

+1 당신이 옳습니다. –

0

.trim() 방법.