2 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個贊
對于這個問題有很多解決方案,我知道一個:對于單個文件,啟動一個線程來檢查 lastModified 值并將其與之前的值進(jìn)行比較。
import java.util.*;
import java.io.*;
public abstract class FileWatcher extends TimerTask {
private long timeStamp;
private File file;
public FileWatcher( File file ) {
this.file = file;
this.timeStamp = file.lastModified();
}
public final void run() {
long timeStamp = file.lastModified();
if( this.timeStamp != timeStamp ) {
this.timeStamp = timeStamp;
onChange(file);
}
}
protected abstract void onChange( File file );
}
這是測試的主要內(nèi)容:
import java.util.*;
import java.io.*;
public class FileWatcherTest {
public static void main(String args[]) {
// monitor a single file
TimerTask task = new FileWatcher( new File("c:/temp/text.txt") ) {
protected void onChange( File file ) {
// here we code the action on a change
System.out.println( "File "+ file.getName() +" have change !" );
}
};
Timer timer = new Timer();
// repeat the check every second
timer.schedule( task , new Date(), 1000 );
}
}

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個贊
如果您的意圖是知道某個文件是否被修改,那么您肯定不必檢索上次修改時間。Java NIO 有inotify
(在 Linux 上)名為WatchService
https://docs.oracle.com/javase/tutorial/essential/io/notification.html的包裝器。
您可以在您感興趣的文件上注冊ENTRY_MODIFY
事件,然后等待相關(guān)聯(lián)的監(jiān)視鍵發(fā)出信號。
請注意,在 Linux 中,我們擁有比 Java NIO 提供的更精細(xì)的事件類型。例如ENTRY_MODIFY
,當(dāng)發(fā)生寫入或更改屬性時將觸發(fā)。intofiy
by constast 為此分離了事件類型:IN_ATTRIB
和IN_WRITE
.
添加回答
舉報