java.nio.file.WatchEvent дает мне только относительный путь. Как я могу получить абсолютный путь к измененному файлу? - PullRequest
31 голосов
/ 18 октября 2011

Я использую Java 7, java.nio.file.WatchEvent вместе с WatchService.После регистрации, когда я опрашиваю события ENTRY_MODIFY, я не могу получить абсолютный путь к файлу для события.Есть ли способ получить абсолютный путь к файлу из объекта WatchEvent?

Ответы [ 4 ]

97 голосов
/ 18 октября 2011

Вам нужно получить родительский каталог из WatchKey для разрешения полного пути

WatchKey key;
WatchEvent<Path> event;

Path dir = (Path)key.watchable();
Path fullPath = dir.resolve(event.context());

Этот фрагмент кода читается так, как будто ему требуется сопроводительная документация, он сам по себе не имеет большого смысла. Каковы были их намерения с этим конкретным дизайном API?

И это только начало, возможно, неинтуитивного использования. API наблюдателя файлов в Java субъективно уступает альтернативным библиотекам.

2 голосов
/ 06 октября 2015

Предполагается, что вы захотите просмотреть несколько каталогов (например, отслеживая дерево файлов на предмет изменений), хранящих зарегистрированный WatchKey и связанный с ним Path в Map<WatchKey, Path>, также будет жизнеспособным решением.

Когда событие инициируется, можно запросить Map для связанного Path с указанным WatchKey, а затем Path измененного файла может быть разрешен с помощью Path the WatchKey ассоциируется с.

0 голосов
/ 10 июня 2013

String fullPath = path.toString () + "\\" + event.context (). ToString ();

: D

0 голосов
/ 18 октября 2011

В зависимости от того, какой объект у вас есть, вы можете получить его абсолютный путь:

Path.toAbsolutePath ()

File.getAbsoluteFile ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...