05. ファイルの読み込み RFile.java

プログラムは人間同様、食べる、消化、出す。というような流れになる。今回は、食べるの部分。ファイルを食べて、そのまま出すというプログラム。

 

RFile.java

 //
// RFile.java
//
// ファイルの内容を表示する
//
// 使い方 java RFile (ファイル名) 
//

import java.io.*;

public class RFile {
	public static void main( String[] args ) {
	
		byte[] buff = new byte[4096];	// バッファ定義
		boolean bStop = false;		// 終了判断フラグ
		FileInputStream inFile = null;	// ファイル読取用オブジェクト
		
		// ファイル名を指定していなかったら終了する
		if ( args.length <= 0 ) {
			System.out.println( "ファイル名を指定してください!" ) ;
			System.exit( 1 ) ;
		}
		
		// ファイルを準備する
		try {
			inFile = new FileInputStream( args[0] ) ;
		} catch( Exception e ) {
			System.err.print( "ファイル[" ) ;
			System.err.print( args[0] );
			System.err.print( "]を開く事ができません!" );
			System.exit( 1 );
		}
		
		// ファイルを読み込んで表示する
		while ( !bStop ) {
			try {
				int n = inFile.read( buff ) ;		// 読み込む
				System.out.write( buff, 0, n ) ;	// 表示する
			} catch( Exception e ) {
				bStop = true ;		// ループ終了
			}
		}
		
		// ファイルを閉じる
		try {
			inFile.close() ;
		} catch( Exception e ) {
			System.err.println( "ファイルを閉じることができません!" ) ;
			System.exit( 1 ) ;
		}
	}
}

 

コンパイル

 $ javac RFile.java

 

実行

$ java RFile Sample.txt 
こんにちは。
サンプルのテキストです。
改行コードは、LFにしています。

 

 ポイント

  •  Sample.txtの文字コードはShift_JIS、改行コードはLF にする。(読みやすくするため)
  • readメソッドでファイルを読み込んだら、その長さをn(バイト)に格納する。
  • nに -1 が渡されると、ファイルの終了に達したことになる。
  • System.our.write( buff, 0, n ); はbuffの内容を先頭からnバイト分を出力する。
  • バッファは、4096に指定しているが、他の値でも試してみる。