/** * @version $Id: TextReader.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2011/08/17 12:00:11 * @author wataru-higa * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.correction.common; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import com.tida_okinawa.corona.common.Encoding; // note: MorphRelation と JumanAnalysis で共通の処理 /** * テキストファイルを一行ずつ読み込んで、処理する抽象クラス * FluctuationRevReader.javaとMorphemeRelationReader.javaの共通処理をまとめた */ public abstract class TextReader { /** * テキストファイルを読む * * @param file * 解析結果のファイル * @param code * 文字コード * @exception IOException * 読み込みエラー * @exception FileNotFoundException * fileが見つからない */ public void read(File file, Encoding code) throws IOException, FileNotFoundException { FileInputStream fis = new FileInputStream(file); try { read(fis, code); } catch (IOException e) { throw e; } finally { fis.close(); } } /** * ファイルオープン処理 * * @param in * 変換するストリーム * @param code * 文字コード * @return サポートしていないエンコードの場合、システムデフォルトのエンコードで作成したBufferedReader */ private static BufferedReader toBufferedReader(InputStream in, Encoding code) { try { return new BufferedReader(new InputStreamReader(in, code.toString())); } catch (UnsupportedEncodingException e) { e.printStackTrace(System.err); return new BufferedReader(new InputStreamReader(in)); } } /** * ストリームを読み込んで、1行ずつ処理部に引き渡す。 * このメソッドでは、ストリームはクローズされない。 * * @param in * 解析結果のストリーム * @param code * 文字コード * @exception IOException * 読み込みエラー */ public void read(InputStream in, Encoding code) throws IOException { BufferedReader bf = toBufferedReader(in, code); read(bf); } /** * ストリームを読み込んで、1行ずつ処理部に引き渡す。 * このメソッドでは、BufferedReaderはクローズされない。 * * @param br * 入力ストリーム * @exception IOException * 読み込みエラー */ public void read(BufferedReader br) throws IOException { /* 最終行まで1行ずつ読み込んで、処理する */ String line; while ((line = br.readLine()) != null) { /* note: ここの処理は、クラスごとに異なる */ process(line); } } /** * 1行分のデータを処理する * * @param line * 1行分の文字列 */ protected abstract void process(String line); }