lunedì 21 ottobre 2013

Q18

Given the directory structure that contains three directories: company, Salesdat, and Finance:

- Company
            - Salesdat
                        - Target.dat
            - Finance
                        - Salary.dat
                        - Annual.dat


And the code fragment :

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

public class SearchApp extends SimpleFileVisitor<Path> {
       private final PathMatcher matcher;

       SearchApp() {
             matcher = FileSystems.getDefault().getPathMatcher("glob:*dat*");
       }

       void find(Path file) {
             Path name = file.getFileName();
             if (name != null && matcher.matches(name)) {
                    System.out.println(name);
             }
       }

       public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
             find(file);
             return FileVisitResult.CONTINUE;
       }

       public static void main (String [] args) throws IOException
                 
             SearchApp obj = new SearchApp();       
             Files.walkFileTree(Paths.get("//Company"), obj);
       }
}


If Company is the current directory, what is the result?



A.
Prints only Annual.dat



B.
Prints only Salesdat, Annual.dat
 

C.
Prints only Annual.dat, Salary.dat, Target.dat

D.
Prints at least Salesdat, Annual.dat, Salary.dat, Target.dat

Risposta C.

Per scorrere i file contenuti dentro una alberatura di directory si può utilizzare l’interfaccia FileVisitor.

Un modo più semplice è quello di estendere la classe SimpleFileVisitor che estende l’interfaccia e sovrascrivere poi i soli metodi che interessano.

In questo esempio viene sovrascritto il solo metodo visitFile che viene invocato nel momento in cui siamo sopra il file ispezionato.

L’applicazione dell’esempio crea un cammino, un walk, tramite walkFileTree . Nel modo scritto il cammino ha solo il punto di inizio e il fileVisitor, quindi significa che andrà a cercare in tutti i sottolivelli senza alcun limite.




Quindi entreremo in per ogni file visitFile al livello pari o inferiore al punto di inizio. Quindi andremo a visitare ogni file.

Per ogni file faremo il match, per vedere se rispetta la condizioni di ricerca che abbiamo espresso con la sintassi glob.

glob:*dat* significa che troveremo

·         Tutti i file con estensione .dat.
·         Tutti i file che contengono dat in qualunque punto del nome.

Quindi troveremo :

Annual.dat
Salary.dat
Target.dat

Ma troveremmo anche questi file:
datprova.txt
provadatprova.txt
dat
provadat
datprova
provadatprova


Invece non troveremo mai nessuna directory perché non andremo mai ad esaminarle.

Riferimenti:

 

Nessun commento:

Posta un commento