lunedì 16 settembre 2013

Q5

Given the code fragment:

public class Test {
       public static void main(String[] args) {
             Path dir = Paths.get("D:\\company");
             //insert code here. Line ***
                    for (Path entry : stream) {
                           System.out.println(entry.getFileName());
                    }
             } catch (IOException e) {
                    System.err.println("Caught IOException: " + e.getMessage());
             }
       }

Which two try statements, when inserted at line ***, enable you to print files with the extensions.java,
.htm, and .jar.

A.
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir,”*.{java, htm,jar}”)){

B.
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir,”*. [java, htm, jar]“)) {

C.
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir,”*.{java*, htm*, jar*}”)) {

D.
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir,”**.{java, htm, jar}”)) {

La risposta è A e D.
Infatti sia A che D indicano di prendere tutti i file che terminano in java oppure htm oppure jar.

La B non funziona perchè oltre allo spazio tra l'asterisco e le parentesi (probabilmente un errore nella domanda) le parentesi sono quadre. Le parentesi quadre indicano una collezione di caratteri.
[java, htm, jar] significa : Prendi tutti i file che contengano almeno una j oppure a oppure  v oppure  a oppure uno spazio oppure h ecc fino alla r di jar.

La C invece prende tutti anche i file la cui estensione inizia con il termina specificato. Ad esempio .java ma anche .javadoc , a causa dell'asterisco finale.

Riferimenti
http://docs.oracle.com/javase/tutorial/essential/io/dirs.html
  Listing a Directory's Contents
  Filtering a Directory Listing By Using Globbing

http://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob

Argomento glob
Files.newDirectoryStream accetta un argomento glob. La sintassi glob serve a specificare un comportamento dei percorsi.

Nei nostri casi:
Un asterisco * significa tutto, dal lato dell'asterisco.
Due asterischi ** significa tutto, dal lato degli asterischi ma penetra anche dentro le sottocartelle.
Ad esempio :
*.html prende tutti i file che finiscono in .html

Le parentesi graffe indicano una collezione, e quindi una sorta di OR.
Ad esempio :
◦{sun,moon,stars} significa : sun oppure moon oppure star.

Le parentesi quadre indicano una collezione di singoli caratteri:
[aeiou] significa : prendi tutti file che abbiamo almeno una vocale minuscola.

Nessun commento:

Posta un commento