java: ファイルサイズが変わったら検知する
import java.io.*;
class LogfileMon {
public static void main(String args[])
{
int filenum = args.length;
for (String name:args) new Thread(new FilePoll(name,5000)).start();
}
}
class FilePoll implements Runnable {
File file;
long prevSize = -1;
long interval=300000;
public FilePoll(String name){
this.file = new File(name);
}
public FilePoll(String name,long interval){
this.file = new File(name);
this.interval = interval;
}
public FilePoll(File file){
this.file = file;
}
@Override
public void run(){
while(true){ // こういうのってみんなどうやってるんだろう。
try{
if (prevSize!=getFSize()) {
System.out.println(getFSize()+" "+file.getName());
}
prevSize=getFSize();
Thread.sleep(this.interval);
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
public long getFSize(){
return file.length();
}
}
コンパイルしたら
$ ls
hogehoge1.txt hogehoge2.txt
$ java LogfileMon hogehoge*.txt &
$ echo .... >> hogehoge1.txtとか。
- TODO:
- 差分を出力. FileInputStream#read(char[] ch,int off, int len )を使えばよいかな?
- 国際化(asciiとShift_JISとjapaneseEUCとUTF-8対応をそう呼んでよいものか…)
JUGEMテーマ:コンピュータ
コメント
コメントを投稿
「コメントを投稿できるユーザー」の範囲は変更される可能性があります。