2012-11-29 5 views
1

이 코드를 사용하여 무언가를 쓰고 싶지만 실행 후 문자 사이에 공백이 있습니다. 하지만 코드에서 문자열에 공간을주지 않습니다.java.io FileOutPutStream - 문자 사이에 공백이 있습니다. 왜?

import java.io.*; 

public class WriteText{ 

public static void main(String[] args) { 

FileOutputStream fos; 
DataOutputStream dos; 

try { 

    File file= new File("C:\\JavaWorks\\gui\\bin\\hakki\\out.txt"); 
    fos = new FileOutputStream(file); 
    dos=new DataOutputStream(fos); 

    dos.writeChars("Hello World!"); 
} 

catch (IOException e) { 
    e.printStackTrace(); 
} 

} 

} 

출력이 (텍스트 파일)입니다 : H e l l o W o r l d !

답변

5

사용 기본적으로 writeBytes

dos.writeBytes("Hello World!"); 

, writeChars는 2 바이트로 모든 문자를 작성합니다. 두 번째 것은 여분의 공간으로 간주됩니다.

+0

나도 마찬가지입니다. 여전히'writeChars'의 목적이 무엇인지 배우려고합니다 ... – PearsonArtPhoto

+1

Java docs는 다음과 같이 말합니다 : "문자열 s의 모든 문자를 출력 스트림에 순서대로 문자 당 2 바이트 씩 씁니다. s가 null이면 NullPointerException이 s.length가 0의 경우는 문자는 기입 해지지 않은 경우는 최초로 문자 s [0], 다음에 s [1] 등이 기입 해져 마지막에 기입 해지는 문자는 s [s.length-1]가됩니다. 각 문자에 대해서, writeChar 메소드와 완전히 같은 방법으로, 실제로 2 바이트가 상위 바이트 먼저 기입 해집니다. 누구가 여분 1 비트를 원하는지. 나는 큰 질문을한다. – hakiko

+1

writeChars의 목적은 유니 코드 지원입니다. – BevynQ

1

대신 FileWriter 및 BufferedWritter를 사용할 수도 있습니다. 작업이 끝나면 버퍼 또는 DOS를 닫는 것을 잊지 마십시오.

 FileWriter file; 
     BufferedWriter bw = null; 

    try { 

     file = new FileWriter("C:\\JavaWorks\\gui\\bin\\hakki\\out.txt"); 
     bw = new BufferedWriter(file); 

     bw.write("Hello World!"); 
    } 

    catch (IOException e) { 
     e.printStackTrace(); 
    } 

    finally{ 
     try{ 
      bw.close(); 
     } 

     catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 
+2

감사합니다. 이것은 나에게 또 다른 좋은 해결책입니다. – hakiko

관련 문제