Come evitare di considerare/aprire i file protetti

di il
4 risposte

Come evitare di considerare/aprire i file protetti

Creo una lista che contiene tutti i files di una directory e n subdirectories e poi li apro uno ad uno per cercare una parola chiave. Fino a qui non ho nessun problema, però se non ho i privilegi per aprire quel file, il programma mi da un eccezione e si interrompe. Cosa potrei utilizzare per creare qualcosa del tipo:

Ho i privilegi per avere accesso al file?
SI -> lo apro
NO -> passo oltre


Vi ringrazio molto.

4 Risposte

  • Re: Come evitare di considerare/aprire i file protetti

    Devi gestire l'eccezione
  • Re: Come evitare di considerare/aprire i file protetti

    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);
    	}
    
    
  • Re: Come evitare di considerare/aprire i file protetti

    È un bug mai risolto di Files.walk() in Java 8
    https://bugs.openjdk.java.net/browse/JDK-803991

    Soluzione 1: regressione alla versione 7u51
    Soluzione 2: usa C#
  • Re: Come evitare di considerare/aprire i file protetti

    bobbyZ ha scritto:


    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
    Probabilmente forse ti conviene tornare ai cari "vecchi" list()/listFiles() di java.io.File dato che mi sembra che la NIO2 API non la "maneggi" bene.

    E comunque hai fatto degli "erroracci":

    for (int i = 0; i < FileList().size(); i++) {
    File file = new File((String) FileList().get(i));

    System.out.println(FileList().get(i));

    Queste in rosso sono tutte invocazioni di FileList() quindi riesegui la scansione una marea di volte SENZA alcun motivo. Sì ... questi sono proprio erroracci ...
Devi accedere o registrarti per scrivere nel forum
4 risposte