chanting an air of joyous bliss

普段の生活で見逃しがちな面白いことを書いていく
そんなブログです

Javaでヘッダ、トレーラ付きのテキストファイルの入力処理をする

2017-06-25 21:09:22 | Java

こんな感じのテキストファイル

aa,bb
//start
1,2,3,4,5
11,21,33,34,95
21,61,38,33,15
//end
aaa,bb
aad,bb
//start1
13,21,3,43,5
11,21,33,334,95
21,61,38,133,315
//end2
aaa,bb

があったとき、//start~//end,//start1~//end1で囲まれているカンマ区切りの数値処理を行うプログラムをJavaで書いてみる

package file;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class FileReadTest {

	private static String FILE_PATH ="C:\\test\\readTest.txt";
	
	public static void main(String args[]) throws Exception{
		//ヘッダ行が//start, トレーラ行が//endのテキスト処理を行う
		new FileReadTest().read(FILE_PATH,new ParamBean("//start","//end"));
		//ヘッダ行が//start1, トレーラ行が//end1のテキスト処理を行う
		new FileReadTest().read(FILE_PATH,new ParamBean("//start1","//end2"));
	}

	public void read(String filePath,ParamBean p) throws Exception{
		BufferedReader in = new BufferedReader(new FileReader(filePath));
		String line = null;
		while((line=in.readLine())!=null){
			if(
			checkConStrEdit(line,p)
			.editStr(line,p)
			.tearminate(p))
			break;
		}
		in.close();
	}
	
	//テキストファイル処理の制御を行う
	protected FileReadTest checkConStrEdit(String str,ParamBean parm){
		//ヘッダ行を読み込んだ時、ヘッダファイルを読み込んだことを示すフラグをセットする
		parm.isStarted = parm.isStarted ||  parm.fromStr.equals(str);
		//ヘッダ行を読み込んだ時、かつ、トレーラー行を読み込んでいない場合、処理中であることを示すフラグを立てる
		parm.isReading = parm.isStarted && !parm.fromStr.equals(str) && !parm.toStr.equals(str);
		//トレーラー行を読み込んだことを示すフラグを立てる
		parm.isEnd     = parm.toStr.equals(str);

		return this;
	}
	
	//テキストファイル処理を行う
	protected FileReadTest editStr(String str,ParamBean param){
		if(!param.isReading)return this;
		param.list.add(Arrays.asList(str.split(","))
				.stream()
				.mapToInt(Integer::parseInt).sum());
		return this;
	}
	
	protected boolean tearminate(ParamBean parm){
		if(!parm.isEnd)return false;
		parm.list.stream().forEach(System.out::println);
		parm.initialize();
		return true;
	}
	
	public static class ParamBean{
		//次の行からテキスト処理を開始するヘッダを表す
		public final String fromStr;
		//テキスト処理を終了するトレーラを表す
		public final String toStr;
		
		//ヘッダ行を読み込んだかどうか識別するためのフラグ
		public boolean isStarted;
		//テキスト処理中を識別するフラグ
		public boolean isReading;
		//テキスト処理の終了を識別するフラグ
		public boolean isEnd;
		
		//テキスト処理をした結果を格納するリスト
		public List  list =new ArrayList();
		
		public ParamBean(String fromStr,String toStr){
			this.fromStr = fromStr;
			this.toStr=toStr;
		}
		
		public void initialize(){
			isStarted=false;
			isReading=false;
			isEnd=false;
			list =new ArrayList();
		}
	}
	
}
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 情報処理安全確保支援士試験... | トップ | Javaでループ処理を抽象化する »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Java」カテゴリの最新記事