У меня есть программа, которая отслеживает любые изменения в каталоге.Ошибка пути к файлу Путь в java
Это выход программы.
C:\REST API\source\data_id.txt
The new file :data_id.txtEvent :ENTRY_CREATE
C:\REST API\source\New folder
The new file :New folderEvent :ENTRY_CREATE
C:\REST API\source\NhuPhutBanDau-NooPhuocThinh-4549467.doc
The new file :NhuPhutBanDau-NooPhuocThinh-4549467.docEvent :ENTRY_CREATE
Моя программа контролирует каталог C:/REST API/source
корневой каких-либо изменений. Когда я копирую файл data_id.txt
в корневой каталог, он может обнаруживать новый файл, как показано выше в выводе и в каталоге.
После этого, когда я пытаюсь создать папку, он также может обнаружить, что есть новая папка и показывает каталог новой папки на выходе.
Но проблема в том, что когда я пытаюсь поместить файл во вновь созданную папку, он снова сможет обнаруживать изменения в новой папке C:\REST API\source\New folder
, которая не является корневым каталогом, установленным в моей программе, которая равна C:\REST API\source
.
Мне нужна программа для обнаружения изменений только в корневом каталоге.
Может ли кто-нибудь направить меня на это?
Это мой исходный код:
public class fileStatus {
private final WatchService svc = null;
private final HashMap<WatchKey , Path> keyMap = null;
public static void main(String [] args) throws FileNotFoundException, IOException, JSONException, InterruptedException
{
try(WatchService svc = FileSystems.getDefault().newWatchService())
{
Map<WatchKey, Path> keyMap = new HashMap<>();
Path path = Paths.get("C:/REST API/source/");
fileStatus fs = new fileStatus();
fs.registerAll(path,keyMap,svc);
WatchKey wk ;
do
{
wk = svc.take();
Path dir = keyMap.get(wk);
for(WatchEvent<?> event : wk.pollEvents())
{
WatchEvent.Kind<?> type = event.kind();
Path fileName = (Path)event.context();
Path child = path.resolve(fileName);
System.out.println(child);
if (Files.isDirectory(child, LinkOption.NOFOLLOW_LINKS))
{
if(type == StandardWatchEventKinds.ENTRY_CREATE)
{
registerAll(child,keyMap,svc);
}
}
System.out.println("\nThe new file :"+fileName+ "Event :" +type);
}
}while(wk.reset());
}
catch(IOException e)
{
e.printStackTrace();
}
}
private static void registerAll(Path path, Map<WatchKey, Path> keyMap, WatchService svc) throws IOException
{
Files.walkFileTree(path,new SimpleFileVisitor<Path>()
{
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs) throws IOException
{
if(attrs.isDirectory())
{
keyMap.put(path.register(svc, StandardWatchEventKinds.ENTRY_CREATE),path);
}
return FileVisitResult.CONTINUE;
}
});
}
}
* Компилятор * Java, конечно, не отображается, что выход. * Ваша программа * есть. – Andreas
Задайте себе этот вопрос: Какова цель 'keyMap'? – Andreas
использовать для регистрации службы наблюдения и события – attack