2011-11-11 19 views
0

我有下面的代碼,但是當我檢查輸出文件時,char [] cc似乎沒有被寫入。有人能告訴我什麼是錯的嗎?char []上的流寫入器不起作用

import java.io.*; 

class Test { 
    public static void main(String[] args) { 
    System.out.printf("start of main\n"); 
    char[] cc = new char[300]; 
    try { 
     String s = "this is a test."; 
     System.arraycopy(s.toCharArray(), 0, cc, 0, s.length()); 
     System.out.printf("cc = %s\n", new String(cc)); 
     String filename = "tst.data"; 
     DataOutputStream ostream = new DataOutputStream(new FileOutputStream(filename)); 
     OutputStreamWriter writer = new OutputStreamWriter(ostream); 
     writer.write(cc, 0, 300); 
     ostream.close(); 

     DataInputStream istream = new DataInputStream(new FileInputStream(filename)); 
     InputStreamReader reader = new InputStreamReader(istream); 
     char[] newcc = new char[300]; 
     reader.read(newcc, 0, 300); 
     istream.close(); 

     System.out.printf("newcc = %s\n", new String(newcc)); 
    } catch (Exception e) { 
     System.out.printf("Exception - %s\n", e); 
    } 
    } 
} 
+1

您正在使用焦問題更加複雜[]當你並不真正需要的是,至少在這個給定的代碼。你可以通過使用字符串 – gigadot

回答

3

您需要關閉最外層的I/O包裝。

通過

writer.close(); 

相依替換

ostream.close(); 

到混凝土問題,那些DataOutputStreamDataInputStream包裝是在這種情況下是不必要的。刪除它們。最後,您應該關閉finally區塊中的流。另請參閱以下相關問題:Do I have to close FileOutputStream which is wrapped by PrintStream?

+0

來完成上述任何操作,但我真正想要的是在編寫者寫出數組之後使用ostream寫入。如果write.close被調用,那麼ostream將如何繼續寫入。當然,作者不支持write(int)。 – user1040876

+0

如果你關閉'ostream',那你會怎麼做'writeInt()'呢?只需調用'writer.flush()'並在調用'writer.close()'之前完成。順便說一句,功能要求是什麼?我忍不住有一種印象,那就是你並不真正理解DataInput/OutputStream的用途和/或過於簡單的事情。 – BalusC

+0

但這不起作用。在調用writer.close()之前,我可以用ostream寫入(int),但是當我嘗試讀取它時會導致IOException。 – user1040876

0

它接縫該作家仍然沒有沖洗緩衝區到ostream。 您可以使用writer.flush(); 這樣

writer.write(cc, 0, 300); 
writer.flush();