Ci sto provando, ma senza successo. Il messaggio di exception è il seguente.
Exception in thread "main" java.io.UncheckedIOException: java.nio.file.AccessDeniedException: C:\$Recycle.Bin\S-1-5-18
Perchè sto facendo girare il programma nella directory C:\\ , proprio per risolvere questo problema dei file di sistema. Mentre in qualsiasi altra directory (dove non sono presenti file di sistema) il programma funziona correttamente: posiziona tutti i files di una directory e di tutte le sue subdir in una lista, poi verifica se il file è binario o testuale e nel caso sia testuale, cerca una determinata sequenza di parole all'interno.
Vi copio il codice che contiene:
la classe main, la classe FileList (che inserisce i files in una lista), la classe Scansion (che cerca la sequenza di parole, sottoforma di Stringa, all'interno del file testuale). Non allego la classe per distinguere se un file è binario o testuale, nel codice risulterà come isBinaryFile() , non è pertinente per il problema.
Vi ringrazio molto per l'aiuto.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.AccessDeniedException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Objects;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ScannerFiles {
public static void main(String[] args) throws FileNotFoundException, AccessDeniedException, IOException {
try {
Scansion();
} catch (AccessDeniedException e) {
System.err.println("Access denied");
}
}
public static List FileList() {
List<String> ElencoFiles = null;
Path path = Paths.get("C:\\");
int subDirLevel = 20;
try (Stream<Path> subPaths = Files.walk(path, subDirLevel)) {
List<String> subPathList = subPaths.filter(Files::isRegularFile).map(Objects::toString)
.collect(Collectors.toList());
ElencoFiles = subPathList;
} catch (IOException e) {
e.printStackTrace();
}
return ElencoFiles;
}
public static void Scansion() throws FileNotFoundException, IOException, AccessDeniedException {
int noInfectedCount = 0;
int yesInfectedCount = 0;
int totalFiles = 0;
for (int i = 0; i < FileList().size(); i++) {
File file = new File((String) FileList().get(i));
if (isBinaryFile(file) != true) {
try {
Scanner scan = new Scanner(file);
String searchWords = "$kvymy = hzwtvoe($edhylof, $kvymy)";
while (scan.hasNextLine()) {
String str = scan.nextLine();
if (str.contains(searchWords)) {
yesInfectedCount++;
System.out.println(FileList().get(i));
} else
noInfectedCount++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
totalFiles = noInfectedCount + yesInfectedCount;
System.out.println("********** REPORT **********");
System.out.println("File analyzed n. " + totalFiles + "\nFiles with the word sequence n. " + yesInfectedCount);
}