В этом сценарии, когда внешнее приложение неизвестно и не вызывается из вашего Java-приложения, вы можете создать поток демона. Я предполагаю, что ваше приложение знает местоположение файла. Этот демонический поток может проверять любую блокировку файла и время последнего обновления файла при снятии блокировки. Если последнее обновленное время изменяется, вы знаете, что файл изменен.
Другим вариантом может быть использование стороннего API, такого как FileListener от Apache, который также делает то же самое внутри.