2016-03-27 16 views
7

私はちょっと混乱してFileWriterFileOutputStreamです。 source code of FileWriterを見ると、わずか4つのコンストラクタがあり、各コンストラクタはFileOutputStreamのコンストラクタを呼び出しています。FileWriterとJavaのFileOutputStream

public FileWriter(String fileName) throws IOException { 
     super(new FileOutputStream(fileName)); 
} 
public FileWriter(String fileName, boolean append) throws IOException { 
     super(new FileOutputStream(fileName, append)); 
} 
public FileWriter(File file) throws IOException { 
     super(new FileOutputStream(file)); 
} 
public FileWriter(File file, boolean append) throws IOException { 
     super(new FileOutputStream(file, append)); 
} 
public FileWriter(FileDescriptor fd) { 
     super(new FileOutputStream(fd)); 
} 

これらの違いを検索したところ、mentioned hereが見つかりました。

FileOutputStreamは、画像データ などの生のバイトのストリームを書き込むためのものです。文字のストリームを書き込むには、 FileWriterの使用を検討してください。

FileWriterはどのように違いますか?それでもまだ変更することなくFileOutputStreamのコンストラクタを呼び出しています。

+0

違いは 'write()'メソッドにあります。 – Tunaki

+0

@Tunaki FileWriterの読み込み方法はどこですか?私が言及した引用符は、読み込まれないストリームを書くことです。どうか説明できますか? –

+0

私は書き込みメソッドを意味し、混乱していた... – Tunaki

答えて

11

FileWriterは、Writerです。それはテキストを書くことです。そして、それはファイルにそれを書いていることが起こります。これは、FileOutputStreamへの参照を保持することによって行われます。FileWriterコンストラクタで作成され、スーパークラスコンストラクタに渡されます。

FileOutputStreamは、OutputStreamです。これは、バイナリデータの作成に関するものです。テキストを書きたい場合は、そのテキストをバイナリデータに変換する必要があります。これはまさにFileWriterの機能です。個人的には、FileOutputStreamOutputStreamWriterでラップして、とすることで、文字エンコードを指定することができます(FileWriterは常にプラットフォームのデフォルトエンコードを使用します)。

基本的には、FileWriterを考えることはあなたをさせるための簡単な方法が記述され:

Writer writer = new FileWriter("test.txt"); 

代わりの

Writer writer = new OutputStreamWriter(new FileOutputStream("test.txt")); 

私が正常に受け付けOutputStreamWriterコンストラクタのオーバーロードを使用することをお勧めしたい場合を除きCharset

+0

しかし、私はちょうど4コンストラクタが違いは混乱している?各コンストラクタはFileOutputStreamのコンストラクタを呼び出しています。 –

+0

@LetDoit:いいえ、「ただ4つのコンストラクタ」はありません。他のメソッドもたくさんあり、OutputStreamWriterから継承されています。はい、それぞれのコンストラクタは 'FileOutputStream'コンストラクタを呼び出します。なぜならすべての' FileWriter'は 'FileOutputStream'への参照を持っているからです。しかし、それは 'FileWriter'と' FileOutputStream'が同じことを意味するわけではありません。 –

+0

はJVMの違いですか?私はコーディングの違いも期待していたので。 –

1

FileOutputStreamは、直接バイトを書き込みます。 FileWriterFileOutputStreamをカプセル化して(質問のようにFileWriterコンストラクタに作成します)、文字や文字列を書くための便利なメソッドを提供します。

関連する問題