Я хотел бы вернуть значения рекурсивного метода, который перечисляет все файлы в каталоге и подкаталогах. Цель состоит в том, чтобы создать HashSet значений файла md5.Возвращаемые значения файлов рекурсивного метода
На данный момент код работает нормально, но только в корневом каталоге, а не в рекурсивном режиме.
static Set<String> localMd5Listing() throws Exception {
List<String> localMd5List = new ArrayList<String>();
if(!baseModDirectoryFile.exists()){
System.out.println("baseModDirectory doesn't exist, check your baseModDirectory variable.");
}
else{
if(baseModDirectoryFile.isDirectory()){
File[] paths = baseModDirectoryFile.listFiles();
if(paths != null){
for(File path:paths){
if(path.isFile()){
FileInputStream fis = new FileInputStream(path);
String md5 = org.apache.commons.codec.digest.DigestUtils.md5Hex(fis);
fis.close();
localMd5List.add(md5);
}
else if(path.isDirectory()){
listChildren(path);
//Check md5 for children files as path.isFile condition
}
}
}
}
}
Set<String> localSet = new HashSet<String>();
localSet.addAll(localMd5List);
localMd5List.clear();
localMd5List.addAll(localSet);
return localSet;
}
метод listChildren рекурсивного результата:
public static void listChildren(File dir) throws IOException{
File[] files = dir.listFiles();
for(File file:files){
if(file.isDirectory()){
listChildren(file);
}
else{
//Return file variable to use them in localMd5Listing()
}
}
}
Unfortuntely я не знаю, как связать 2 метода для возврата значения listChildren() в localMd5Listing(). Я думаю, что не лучший способ иметь listFile() в первом методе.
Спасибо!
Я не думал о создании метода с 2 начальными переменными, и списком файлов, спасибо, что работают отлично! ;) Любая идея сравнить этот последний HashSet с другим и удалить файлы, связанные с хэшем, который не содержится во втором HashSet? Еще раз спасибо! –
mickaelb91
Наконец-то я пришел, чтобы удалить файлы, используя метод recurseDelete, подобный вашему примеру. Спасибо ! – mickaelb91