Cara, eu tenho algo que talvez possa ajudar.
Coloquei em anexo os dois arquivos principais para isso.
Descrito abaixo, temos o metodo main que está dentro do arquivo DirPoolingController.
Inicialmente instanciamos a classe DirPoolingController e passamos como parametro o diretorio que queremos monitorar. Se o diretório nao existir ou não for um diretório uma exceção é lançada. Após, adicionamos a lista de eventos a implementação da Interface FileActionListener, este evento será disparado toda vez que for encontrado um arquivo que esteja de acordo com o regex passado como parametro para DirPoolingController.peekPooling(String regex). (Se você não conhece de regex aqui no forum tem um tutorial só sobre isso). Este mesmo metodo pode ser chamado sem parametros, então, ele traz todos os arquivos do diretório.
O pulo do gato para usar esta classe é usa-la em conjunto com a classe Timer do pacote java.utils, aonde vc pode mandar monitorar a pasta de tempos em tempos, após isso, é só salvar o ultimo array retornado e fazer uma comparação mais profunda (Arrays.deepEquals), ae vc tem na mão os arquivos modificados e que atendam a alguma regra especifica em relação ao nome.
Para usar esta classe em linux vc deve colocar o path para o arquivo de uma forma que ele entenda, né?
public static void main(String...args){
DirPoolingController dirCtrl = null;
try {
dirCtrl = new DirPoolingController("D:\\Minha Pasta");
dirCtrl.addFileArraived( new FileActionListener() {
public void peekPerformed(File[] arquivos) {
for( int i = 0; i < arquivos.length; i++ ) {
System.out.printf( "[%d] - %s\n", i+1, arquivos[i].getName() );
}
}
} );
dirCtrl.peekPooling( "(.*?).(txt|abc)" );
} catch (IOException ex) {
Logger.getLogger(DirPoolingController.class.getName()).log(Level.SEVERE, null, ex);
}
}
Inté!