- 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