Java プログラムメモ


トップ

java.io を使う

java.io パッケージの Stream, Reader, Writer について解説します。

Stream とは、データを扱う場合にデータを流れとして捉える抽象的な概念です。 データの読み込みには InputStream を、データの書き出しには OutputStream を使用します。
InputStream,OutputStream それぞれのサブクラスについて解説します。

index

FileInputStream と FileOutputStream

FileInputStream,FileOutputStream は主にバイナリファイルのデータをバイト単位で読み書きする時に利用されます。 よく使うケースとしては、『ファイルのコピー方法』や 『Servlet でファイルをダウンロードする』で利用されます。

ソース記述例

OutputStream out = new FileOutputStream("c:/work/test.txt"); out.write(0x68); out.write(0x6f); out.write(0x67); out.write(0x65); out.close(); InputStream in = new FileInputStream("c:/work/test.txt"); byte[] buff = new byte[128]; int len; while ((len = in.read(buff)) != -1) { for (int i = 0; i < len; i++) { System.out.println(buff[i]); } System.out.println(new String(buff, 0, len)); } in.close();

ファイルの中身

hoge

出力結果

104 111 103 101 hoge

FileReader と FileWriter

FileReader,FileWriter はテキストファイルのデータを char 単位で読み書きする時に利用されます。 直接使うより、他のフィルタを通して間接的に使う方が多いです。

ソース記述例

FileWriter out = new FileWriter("c:/work/test.txt"); out.write("hogeほげ"); out.close(); FileReader in = new FileReader("c:/work/test.txt"); char[] buff = new char[128]; int len; while ((len = in.read(buff)) != -1) { System.out.println(new String(buff, 0, len)); } in.close();

ファイルの中身

hogeほげ

出力結果

hogeほげ

InputStreamReader と OutputStreamWriter

InputStreamReader と OutputStreamWriter は、Stream (byte 配列) を Reader,Writer の文字列を扱うクラスに 変換します。主に文字列の Encode を指定したい場合に使用します。

ソース記述例

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream( "c:/work/test.txt"), "Windows-31J"); out.write("ほげ〜@`\n"); out.write("―"); out.close(); InputStreamReader in = new InputStreamReader(new FileInputStream( "c:/work/test.txt"), "Windows-31J"); char[] buff = new char[128]; int len; while ((len = in.read(buff)) != -1) { System.out.println(new String(buff, 0, len)); } in.close();

ファイルの中身

ほげ〜@` ―

出力結果

ほげ〜@` ―

BufferedReader と BufferedWriter

BufferedReader,BufferedWriter はテキストファイルを効率よく読み書きする為に使用されます。 メモリ上に文字をバッファリングする事により、実際にファイルに対する IO の回数を減らします。
テキストファイルを読み込む場合は、基本的に BufferedReader を使うのがお勧めで、 readLine メソッドで 1 行のテキストを読み込むことが可能です。1 行の終端は CR,LF,CRLF のいずれかになります。

ソース記述例

BufferedWriter out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("c:/work/test.txt"), "Windows-31J")); out.write("ほげ〜@`\n"); out.write("―\r"); out.write("ほげ\r\n"); out.write("ほげ"); out.close(); BufferedReader in = new BufferedReader(new InputStreamReader( new FileInputStream("c:/work/test.txt"), "Windows-31J")); String line; while ((line = in.readLine()) != null) { System.out.println(line); } in.close();

ファイルの中身

ほげ〜@` ― ほげ ほげ

出力結果

ほげ〜@` ― ほげ ほげ

BufferedInputStream と BufferedOutputStream

BufferedInputStream,BufferedOutputStream は主にバイナリファイルのデータをバイト単位で効率よく読み書きする為に使用されます。 BufferedReader と BufferedWriter と同様に、 メモリ上にバイト配列をバッファリングする事により、実際にファイルに対する IO の回数を減らします。 『ファイルのコピー方法』など、Stream を使用する時は、基本的に使用することをお勧めします。

ソース記述例

OutputStream out = new BufferedOutputStream(new FileOutputStream( "c:/work/test.txt")); out.write(0x68); out.write(0x6f); out.write(0x67); out.write(0x65); out.close(); InputStream in = new BufferedInputStream(new FileInputStream( "c:/work/test.txt")); byte[] buff = new byte[128]; int len; while ((len = in.read(buff)) != -1) { for (int i = 0; i < len; i++) { System.out.println(buff[i]); } System.out.println(new String(buff, 0, len)); } in.close();

ファイルの中身

hoge

出力結果

104 111 103 101 hoge


プログラムメモ アフリカ雑貨・珈琲豆・アールブリュット作品 マゴソスクール クラウドファンディング
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送