2013-07-15 50 views
0

爲什麼我在寫入文件中獲取額外字符以獲取以下代碼?如果我使用writeBytes(String)比下面的代碼是工作文件。那麼dos.writeChars()方法有什麼問題?java.io.File在寫入文件時獲取額外字符

File fileObj = new File("student.txt"); 

try { 

    // writing into file 
    FileOutputStream fos = new FileOutputStream(fileObj); 
    String msg = "This is student file"; 

    DataOutputStream dos = new DataOutputStream(fos); 
    dos.writeChars(msg); 

    //reading from file 
    FileInputStream fis = new FileInputStream(fileObj); 
    DataInputStream dis = new DataInputStream(fis); 

    System.out.println(dis.readLine()); 

    for (int i = 0; ((i = dis.read()) != -1); i++) { 
    System.out.println(i); 
    } 

    fos.close(); 
    dos.close(); 

} catch (FileNotFoundException e) { 
    System.err.println("File not found!"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+2

您期待什麼輸出?你得到什麼輸出? –

+0

我期待「這是學生檔案」,但是我在每個字符後都會得到一些額外的字符,比如T [] h [] i [] s [] ...)。 – Vishrant

+0

對於初學者,在打開輸入流之前關閉輸出流。 –

回答

1

writeChars()使用2字節字符(UTF-16)。所以你寫的每個字符都會導致寫入兩個字節。

如果您想在String上使用getBytes()作爲其他編碼並將其寫爲字節。

+0

如果您想繼續使用UTF-16,你總是可以用UTF-16字節順序標記('0xFEFF')作爲輸出的前綴。這將觸發你的文本編輯器正確讀取字節。 –

+0

假設我寫了一些字符串,如「這是學生文件」,那麼它的大小是20字節,當我使用writeChars()時,它將寫入40字節的數據。我的問題實際上是,寫入文件之前和寫入文件之後,字符串的大小是多少。 – Vishrant

+0

在Java中,'String'是由'char's構建的,每個字符都是2個字節。所以字符串一直是20個字符和40個字節。 –

相關問題