- PR -

テキストファイルの最後の行の表示

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/12/02
投稿数: 2
投稿日時: 2006-12-02 03:01
テキストファイルから読み込んでそのテキストファイルの一番下の行だけをコマンドプロント上に表示するというプログラムを組みたいのですが、自分で調べてみても分かりません。方法を教えてください。よろしくお願いします。
テキストファイルの内容全てを表示する事は出来ましたが・・・・。
一応ソース書きます。
import java.lang.*;
import java.io.*;

public class BufRead {
public static void main(String args[]){
char buf[] = new char[1024];
int len = 0;

try {
FileReader reader = new FileReader("abc.txt"); //読み込ませたいファイル名
BufferedReader bufRead = new BufferedReader(reader); //バッファリングの準備
len = bufRead.read(buf); //バッファリングを行ないながら読み込む処理



System.out.println("読み込まれたテキストデータ");
System.out.println(new String(buf, 0, len));

System.out.println("最新のデータ");
System.out.println(buf);
}
catch(IOException e){
System.out.println("エラー:"+e.getLocalizedMessage());
}
}

}


[ メッセージ編集済み 編集者: 未記入 編集日時 2006-12-06 00:54 ]
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-12-02 11:14
>テキストファイルの内容全てを表示する事は出来ましたが・・・・。

ここまでできているなら、もう答えは出ると思うのですが・・・。
1行読んで変数に入れるループを書いていらっしゃるでしょうから、
ループ終了後に変数の値を出力すれば最後の行が出力できますね。

それから、スレッドタイトルを適切なタイトルに変更してください。
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2006-12-05 16:43
BufferedReaderクラスには1行ごとに文字列を読み込んで返すメソッドがあります。これを使えば、簡単にできるのでは?

#追記
BufferedReaderクラスは(その名の通り)内部にバッファを持っているので、自前でバッファのchar型配列を用意して使う必要はないですよ。


[ メッセージ編集済み 編集者: sawat 編集日時 2006-12-05 16:45 ]
未記入
会議室デビュー日: 2006/12/02
投稿数: 2
投稿日時: 2006-12-06 00:58
一応強引にですが表示は出来ました^^;
他にもやり方はあるとは思うのですがもっとスマートな方法などあれば教えていただきたいです。
一応ソースをば
import java.io.*;
import java.lang.*;

class Read{
public static void main(String args[]){
String buf[] = new String[1024];
int a=0;

try{
//BufferedReaderオブジェクトの生成
BufferedReader br = new BufferedReader(new FileReader(args[0]));

String data; //while文を利用してファイルを読み込み
while((data = br.readLine()) != null){
buf[a] = data;
a++;
System.out.println(data);
}
System.out.println("最新のデータは"+buf[a-1]+"です。");

//ストリームを閉じます
br.close();
}catch(IOException e){
System.out.println("Exception :" + e);
}
}

}
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-12-06 01:13
概ね悪くない感じです。
でもこれ、1024行以上あった場合どうなります?
変数 buf[] はいらないと思います。

あと、細かいところではストリームのクローズは finally ブロックでやったほうがいいかも。「とりあえず動く」ことが目的であれば特に気にする必要はないですが。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-12-06 09:47
「要らないもの(最後の行の1行前まで)は、取っておく必要がない」

「要らないものは、上書きしよう」

…と考えると、どうですか?

close()については、mainメソッド内ならどのみち違いはないですが、作法としてfinallyでやりましょう。
1

スキルアップ/キャリアアップ(JOB@IT)