改行を加えて書き出す

ファイルを読んで加工して書き出す

テキストファイルの内容を加工します。"。"を見つけて、その後で改行をいれるというプログラムにします。

まず、エディタで適当なテキストファイルを作成しましょう。ファイル名は kaigyou0.txt。もちろん"。"が含まれていて、"。"の直後に改行されていないところがたくさんある物にします。

ファイル名 kaigyou0.txt

あいう。中身はなんでもいいので、"。"が入っていて、改行が
少ないテキストファイルをつくります。適当に改行があっても
問題ありません。まるのあとに次の文字が続いていないとたぶん行が
1行空くようになると思います。

プログラムの骨組み

ファイル名 AddLF.java

import java.io.*;
public class AddLF { 
    public static void main( String[] args ) {
        try {
            FileReader   in  = new FileReader("kaigyou0.txt");
            BufferedReader inb = new BufferedReader(in);
            FileWriter     out  = new FileWriter("kaigyou1.txt");
            BufferedWriter outb = new BufferedWriter(out);


            ここを考える


            outb.close();
            out.close();
            inb.close();
            in.close();
        }
        catch (IOException e) {
            System.err.println( "ファイルがないのでは?" );
        }
    }
}

プログラムのタイプは前回の一番上の物にしましたが、どれでもかまいません。

ポイント

今度は、1文字ずつ読んでいきますから、

String line;
while ((line = inb.readLine()) != null) {

の代わりに、

int c;
while (( c = in.read() ) != -1) {

を使いましょう。バイナリファイルから入力で使った時は1バイトずつ読むのに使いましたが、FileReaderやBufferedReaderで使う場合は、1文字ずつ読んで、その文字の文字コード(javaの用語でコードポイント)が c に代入されます。

もし、上記の「ここを考える」のところに

int c;
while ((c = inb.read()) != -1) {
      outb.write( c );
}

と書けば、kaigyou0.txtの中の文字はそのままkaigyou1.txtに書き出されることになります。

"。"の文字コード(javaの用語でコードポイント)を調べることができれば、これと比べてもし"。"だったら改行を出力すればOKですね。

if ( c == 「。のコードポイント」) {
   改行の出力「newLine()を使えばよかったね」
}

文字コード(javaの用語でコードポイント)を調べるのは「キーボードから1文字入力」で z の文字コードは 122 と調べていますが、同様なことをファイルからの入力でもできますよ。

もう一つの方法は、"。"からコードポイントに変換するcodePointAt()というメソッドを使って文字コードを調べる方法もあります。Character.codePointAt("。",0)とやって、求めます。これを c と比較することもできます。

もし"。"だったら改行を入れるとは

ファイルから読んだ文字がこうだったとして

一文字ずつ出力するが"。"だったらその直後に改行マークを出力する。

LF

課題

1.

上記の AddLF.java をつくり実行してみなさい

ファイル名 AddLF.java

適当なテキストファイル kaigyou0.txt を作って、実行し、kaigyou1.txt ができていることを確認しなさい。

kaigyou1.txtをエディタで開いて内容を確認しなさい。

うまくいってなければ、AddLF.java にもどってもう一度考え直します。

もくじ

Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
May. 2008 改編