J
JayJay
Gast
Ja Hallo ich habe ein problem mit einem programm an dem ich gerade arbeite. Das programm "watched" über änderungen in einem base folder, bsw: c:\TestFolder , und ich brauche es Rekursiv.
Rekursiv im sinne, dass wenn eine File, isFile() es dass machen soll was es schon macht, dass passt, nur wenn es eine subdirectory innerhalb der base directory findet, also isDirectory(), dann soll es rekursiv in diesem folder wieder die run methode laufen lassen!!!
Mir ist schon klar wie es rekursiv laufen sollte, indem die run() methode innerhalb der eigenen methode aufgerufen wird.
Ich habe vieles versucht nur hab ich noch so einige fehler im programm. Hier ist der code:
public DirWatcher(String path, String filter) throws FileNotFoundException {
this.path = path;
dfw = new DirFilterWatcher(filter);
filesArray = new File(path).listFiles(dfw);
validateDirectory(new File(path));
// transfer to the hashmap be used a reference and keep the
// lastModfied value
for (int i = 0; i < filesArray.length; i++) {
dir.put(filesArray, new Long(filesArray.lastModified()));
}
}
protected abstract void onChange(File file, String action);
public final void run() {
HashSet<File> checkedFiles = new HashSet<File>();
// scanning the files and checking for modification/addition
for (int i = 0; i < filesArray.length; i++) {
Long current = (Long) dir.get(filesArray);
checkedFiles.add(filesArray);
if (current == null) {
// new file
dir.put(filesArray, new Long(filesArray.lastModified()));
onChange(filesArray, "new File\\Directory added");
} else if (current.longValue() != filesArray.lastModified()) {
// modified file ??!!! Distiguish between file and foldeer
dir.put(filesArray, new Long(filesArray.lastModified()));
onChange(filesArray, "File or Directory has been modified");
}
}
// now check for deleted files
Set ref = ((HashMap) dir.clone()).keySet();
ref.removeAll((Set) checkedFiles);
Iterator it = ref.iterator();
while (it.hasNext()) {
File deletedFile = (File) it.next();
dir.remove(deletedFile);
onChange(deletedFile, "deleted");
}
}
Ich bin die sache vielleicht etwas kompliziert angegangen mit den arrays+hashmap+hashset. Was hilfreich wäre ist wo und wie genau ich dieses rekursiv laufen lassen kann, da ich probleme habe mit den typ variablen um dies zu machen. Ich bekomme immer eine fehler meldung: "Cannot instantiate this method", wenn ich etwas versuche.
Danke im vorraus
Rekursiv im sinne, dass wenn eine File, isFile() es dass machen soll was es schon macht, dass passt, nur wenn es eine subdirectory innerhalb der base directory findet, also isDirectory(), dann soll es rekursiv in diesem folder wieder die run methode laufen lassen!!!
Mir ist schon klar wie es rekursiv laufen sollte, indem die run() methode innerhalb der eigenen methode aufgerufen wird.
Ich habe vieles versucht nur hab ich noch so einige fehler im programm. Hier ist der code:
public DirWatcher(String path, String filter) throws FileNotFoundException {
this.path = path;
dfw = new DirFilterWatcher(filter);
filesArray = new File(path).listFiles(dfw);
validateDirectory(new File(path));
// transfer to the hashmap be used a reference and keep the
// lastModfied value
for (int i = 0; i < filesArray.length; i++) {
dir.put(filesArray, new Long(filesArray.lastModified()));
}
}
protected abstract void onChange(File file, String action);
public final void run() {
HashSet<File> checkedFiles = new HashSet<File>();
// scanning the files and checking for modification/addition
for (int i = 0; i < filesArray.length; i++) {
Long current = (Long) dir.get(filesArray);
checkedFiles.add(filesArray);
if (current == null) {
// new file
dir.put(filesArray, new Long(filesArray.lastModified()));
onChange(filesArray, "new File\\Directory added");
} else if (current.longValue() != filesArray.lastModified()) {
// modified file ??!!! Distiguish between file and foldeer
dir.put(filesArray, new Long(filesArray.lastModified()));
onChange(filesArray, "File or Directory has been modified");
}
}
// now check for deleted files
Set ref = ((HashMap) dir.clone()).keySet();
ref.removeAll((Set) checkedFiles);
Iterator it = ref.iterator();
while (it.hasNext()) {
File deletedFile = (File) it.next();
dir.remove(deletedFile);
onChange(deletedFile, "deleted");
}
}
Ich bin die sache vielleicht etwas kompliziert angegangen mit den arrays+hashmap+hashset. Was hilfreich wäre ist wo und wie genau ich dieses rekursiv laufen lassen kann, da ich probleme habe mit den typ variablen um dies zu machen. Ich bekomme immer eine fehler meldung: "Cannot instantiate this method", wenn ich etwas versuche.
Danke im vorraus