2011-11-11 5 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

char []を使用すると、このコードでは本当に必要ないときに複雑になっています。あなたは上記のすべてをString – gigadot

答えて

3

最も外側のI/Oラッパーを閉じる必要があります。

具体的な問題に

writer.close(); 

無関係によって

ostream.close(); 

を交換し、それらDataOutputStreamDataInputStreamラッパーは、この文脈では不要です。削除してください。最後に、finallyブロックのストリームを終了する必要があります。この関連する質問も参照してください:Do I have to close FileOutputStream which is wrapped by PrintStream?

+0

を使って行うことができますが、本当に必要なのは、ライターが配列を書き出した後にostreamを使ってwriteIntを使うことだけです。 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(); 
関連する問題