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テーマ:コンピュータ



コメント

このブログの人気の投稿

4.3.0 Temporary Lookup Failureでドツボってた話

tomcat起動時の環境変数でJRE_HOMEを指定するときに

何が得られて何処へ向かうかだけを問うべき