バイトストリーム

入出力の基本知識で説明したjava.io.InputStream及びjava.io.OutputStreamを利用してバイナリファイルの入出力について説明します。

ビジネスシステムでは、バイナリファイルを操作する場面は、文字ストリームに比較して大変少ないですが、
Javaの入出力を学ぶ意味で学習して下さい。

バイナリーファイルの入出力サンプル

JavaIOByteStreamSample.java
package jp.co.yourcompany.education.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import jp.co.yourcompany.education.exception.ApplicationException;
import jp.co.yourcompany.education.log.InitApplication;

/**
 * バイトストリーム(java.io.InputStream,java.io.OutputStream)クラスの
 * 学習用サンプルクラス
 * @author raita.kuwabara
 */
public class JavaIOByteStreamSample {
    /**
     * ロガーインスタンス
     */
    public static final Logger log = Logger.getLogger( JavaIOByteStreamSample.class.getName() );

    /**
     * educationプロジェクトファイルデータ格納先ディレクトリ
     */
    public static final String PROJECT_DATA_DIR = "c:¥¥projects¥¥education¥¥data";

    /**
     * 入力データ格納先ディレクトリ
     */
    public static final String INPUT_DATA_DIR = JavaIOByteStreamSample.PROJECT_DATA_DIR  + "¥¥input";

    /**
     * 出力データ格納先ディレクトリ
     */
    public static final String OUTPUT_DATA_DIR = JavaIOByteStreamSample.PROJECT_DATA_DIR  + "¥¥output";

    /**
     * デフォルトコンストラクタ
     * ログの初期化
     */
    public JavaIOByteStreamSample(){
        InitApplication app = InitApplication.getInstance();
        app.init();
    }

    /**
     * 入出力ファイルのサンプル
     */
    public void execAllSample(){
        try {
            binaryFileSample();
        } catch (ApplicationException e) {
            log.severe("バイナリーデータの操作でエラーが発生したため異常終了しました。");
            log.log( Level.SEVERE , "例外内容" , e );
        }
        log.info("バイナリーデータの操作は正常終了しました。");
    }

    /**
     * サンプルバイナイリーデータを別ファイルに出力する。
     * @throws ApplicationException ファイルの例外発生時
     */
    private void binaryFileSample() throws ApplicationException {
        final String readFile = INPUT_DATA_DIR + "¥¥java-basic.png";
        final String writeFile = OUTPUT_DATA_DIR + "¥¥java-basic2.png";

        try(
            FileInputStream fis = new FileInputStream( new File( readFile ) );
            BufferedInputStream bis = new BufferedInputStream( fis );
            FileOutputStream fos = new FileOutputStream( new File( writeFile ) );
            BufferedOutputStream bos = new BufferedOutputStream( fos );
        ){

            byte[] buffer = new byte[1024];
            while( bis.read( buffer ) != -1 ) {
                bos.write( buffer );
            }

        } catch (FileNotFoundException e) {
            log.log( Level.SEVERE , "指定されたファイル{0}が存在しません。" , new String[] { readFile }  );
            log.log( Level.SEVERE , "例外内容" , e );
        } catch (IOException e) {
            log.log( Level.SEVERE , "入力ファイル:{0}" , new String[] { readFile }  );
            log.log( Level.SEVERE , "出力ファイル{0}:" , new String[] { writeFile }  );
            log.log( Level.SEVERE , "例外内容" , e );
        }
    }

    /**
     * javacコマンドから実行されるメインメソッド
     * @param arags 引数不要
     */
    public static final void main( String[] args){
        JavaIOByteStreamSample sample = new JavaIOByteStreamSample();
        sample.execAllSample();
    }
}
						

サンプルのダウンロードと実行方法

  • java_sample18.zipファイルを「c:¥download¥java¥samples¥」に保存して下さい。
  • java_sample18.zipファイルを「c:¥projects」配下に展開して下さい。
  • コマンドプロンプトを起動して、「sample18.bat」を実行して下さい。
  • javac,jar,javaが実行されてJavaIOByteStreamSampleが実行されます。
  • 「c:¥projects¥education¥logs」配下のログの実行結果を確認して下さい。
  • 「c:¥projects¥education¥input¥basic-log.png」ファイルが
    「c:¥projects¥education¥output¥basic-log2.png」にコピーされ画像として表示されることを確認して下さい。
  • Linux,Unix,iOSの方はバッチファイルはお手数ですが作成して下さい。改行コードが「CRLF」の点ご留意ください。

参考にするAPI