2016-12-19 20 views
0

私のファイルにデータを印刷するには、PrintWriterDataOutputStreamの両方を書き込む必要があります。しかし、PrintWriterDataOutputStreamコードの後に​​来るが、DataOutputStreamより早く印刷されている。コードのPrintWriterとDataOutputStreamを使用してJavaの同じファイルに書き込む

パート:PWから

import java.io.*; 
import java.util.*; 
public class file { 
    public static void main(String[] args) { 
     DataOutputStream dos=null; 
     PrintWriter pw=null; 
     try { 
      File f=new File("file.txt"); 
      dos=new DataOutputStream(new FileOutputStream(f)); 
      pw=new PrintWriter(f); 
      Scanner b=new Scanner(System.in); 

      for(int i=0;i<=4;i++) { 
       int h=b.nextInt(); 
       b.nextLine(); 
       dos.writeInt(h); 
       String s=b.nextLine(); 
       int l=s.length(); 
       dos.writeBytes(s); 
       pw.println(); 
      } 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if(dos!=null) 
       try { 
        dos.close(); 
       } catch(IOException e) { 
        e.printStackTrace(); 
       } 

      pw.flush(); 
     } 
    } 
} 

新しい行は、これを回避する方法をdos.write();から印刷された第1およびデータを取得しています?それを順番に取得させるか?それらは異なる目的のために使用されているよう

+0

なぜ 'dos.write( '\ n');'を使わず、PrintWriterを取り除くのですか? – PeterMmm

+1

"私のファイルにデータを印刷するには、' PrintWriter'と 'DataOutputStream'の両方を書く必要があります。"同じファイル、テキストとバイナリ、バッファされた出力とバッファされていない出力のどちらにも 'Writers'と' OutputStreams'を混在させることができないからです。ここには設計上の問題があります。 – EJP

+0

dos.write( '\ n')はテキストファイル内に何も印刷しません。 – yashodarshan

答えて

1

実際Writerは(人間が読める)テキストファイルを生成するために使用され、WriterOutputStreamを混ぜ決してとOutputStreamはによって読み取り可能ではない(バイナリファイルを生成するために使用されます人間)は、あなたの要件に従ってそれらのうちの1つだけを使用します。あなただけDataOutputStreamは、単にあなたのOutputStreamであなたのファイルに行区切り文字を書くためにdos.write(System.lineSeparator().getBytes(StandardCharsets.US_ASCII))ようなものでpw.println()を交換使用することを決定したと仮定すると、

。しかしバイナリファイルでは、ファイルが人間によって読み取られることを意図していないので、行区切り文字を追加することは実際には意味をなさないことに注意してください。

関連する問題