Preparare la certificazione Java Programmer OCPJP7: Input/Output e Files

Input/Output e Files

  • Reader e Writer sono classi astratte.
  • Path getFileName() ritorna il nome del file o della directory, cioè l’ultimo elemento del Path.
  • Per ottenere un’istanza di Path si usa il metodo static get() della classe Paths.
  • Il metodo resolve() della classe Path concatena tra loro 2 Path e restituisce il Path risultante.
  • In Java7 è stato aggiunto il metodo toPath() nella classe File che restituisce il relativo oggetto Path.
    • Allo stesso modo nella classe Path è presente il metodo toFile() che restituisce l’equivalente oggetto File.
  • Per confrontare 2 Path con il metodo equals() occorre accertarsi che entrambi siano normalizzati ed espressi come path assoluti.
  • Files è una nuova classe introdotta in Java7 nel package java.nio.file
    • E’ una classe di utility, dichiarata come final, con un costruttore private e solo dei metodi statici.
  • La differenza tra CreateDirectory e CreateDirectories è che CreateDirectories crea anche le directories intermedie contenute nel path passato come parametro, qualora NON esistano.
  • Il metodo getAttribute della classe Files permette di recuperare informazioni sugli attributi di un file.
    • Il parametro fondamentale di questo metodo è il secondo, che indica il nome del parametro che si vuole andare a leggere e la view a cui esso appartiene.
    • La view a cui il parametro appartiene è un oggetto di tipo FileAttributeView.
    • Quando la view NON viene specificata si intende la view basic.
  • Esempi:
    • Files.getAttribute(path, “creationTime”, LinkOption.NOFOLLOW_LINKS)
      La view non è specificata, quindi si intende basic
      Il nome dell’attributo è creationTime
    • Files.getAttribute(path, “dos:hidden”, LinkOption.NOFOLLOW_LINKS)
      La view è dos
      Il nome dell’attributo è hidden
  • Attenzione alle eccezioni scatenate dal metodo getAttribute():
    • Se si indica una view non corretta: UnsupportedOperationException
    • Se si indica una nome di attributo sbagliato: IllegalArgumentException
  • La copy() di un file scatena una FileAlreadyexistException se il Path di destinazione esiste già.
    • Per dire di sovrascrivere il file esistente durante la copia bisogna specificare come CopyOption l’opzione:
      StandardCopyOption.REPLACE_EXISTING
  • La chiusura di uno stream BufferedReader con il metodo close() chiude BufferedReader ed anche TUTTI gli altri stream sottostanti, come ad esempio DataInputStream e FileInputStream
  • Le classi per la gestione degli stream, sia di dati che di caratteri, sono nel package java.io
  • Le principali features introdotte con la libreria NIO sono:
    • Channels
    • Selectors
    • Buffers
    • Charset
  • Il metodo getFileName() della classe Path, se invocato su un path che rappresenta la root (es: D:\) restituisce null.
  • Paths.get() NON scatena delle FileNotFoundException
  • InvalidPathException è una RuntimeException.
  • walkFileTree è un metodo statico definito nella classe Files
  • Il metodo relativize() della classe Path costruisce il path relativo di un Path preso come input rispetto al Path su cui è invocato
  • Il metodo normalize() della classe Path rimuove elementi aggiuntivi come “..” che indicano la directory precedente o “.” che indica la directory corrente.
    • Ad esempio, se si invoca normalize sul Path
      D:\\OCPJP7\\programs\\..\\NIO2\\src\\.\\SubPath.java
    • Si ottiene
      D:\\OCPJP7\\NIO2\\src\\SubPath.java
    • Notare che siccoma prima di “NIO2” c’è “..” si torna su di un livello, perchè significa che “NIO2” è sotto “OCPJP7”, allo stesso livello di “programs”
  • newWatchService() è un metodo abstract definito nella classe FileSystem. Per ottenere l’istanza del WatchService associato ad un Path, occorre prima recuperare il relativo Filesystem e poi chiamare su di esso il metodo newWatchService().
    • WatchService ws = path.getFileSystem().newWatchSerice();
  • System.in è di tipo InputStream.
  • System.out e System.err sono invece di tipo PrintStream.
  • L’interfaccia Closeable estende l’interfaccia AutoCloseable (e non viceversa) per cui anche i tipi che implementano Closeable possono essere utilizzati negli statement try-with-resources.
  • Il metodo close() viene invocato sugli oggetti in ordine inverso rispetto a come essi vengono acquisiti nel blocco try-with-resources.
  • Il metodo read() ritorna -1 se viene raggiunta la fine di uno stream (EOS End Of Stream).
  • Il metodo skip() salta n bytes in fase di lettura.
    • Il metodo skip() può essere utilizzato prima del metodo read()
    • Il metodo skip() scatena una IllegalArgumentException se gli viene passato un valore negativo.
  • Il metodo subPath(int beginIndex, int endIndex) dell’oggetto Path ritorna un altro oggetto di tipo Path il cui nome va da beginIndex COMPRESO a endIndex ESCLUSO.
  • Il metodo subPath della classe Path scatena una IllegalArgumentException se:
    • beginIndex >= del numero di elementi nel Path
    • endIndex <= beginIndex
    • endIndex > del numero di elementi
  • Il metodo readLine() restituisce una String
  • Il metodo readPassword restituisce un array di caratteri (char[])
  • FilterReader è una classe astratta per cui non può essere istanziata.
  • Il metodo getChannel() è fornito solo dalle classi:
    • RandomAccessFile
    • FileInputStream
  • I data streams forniscono dei metodi per leggere dei dati nei formati dei tipi primitivi di Java (int, long, double, ecc..)
  • Gli elementi di un oggetto Path sono delimitati dal separatore. Il primo token, cioè l’unità come ad esempio C:/ non viene considerato.
  • L’oggetto Path non necessariamente deve puntare ad un percorso esistente per essere scorso.
  • Il metodo close() definito nell’interfaccia non AutoCloseable non produce effetto se viene invocato più volte su un oggetto. Non genera eccezioni in questo caso.
  • Il metodo toAbsolutePath() della classe Path aggiunge al Path la parte relativa alla root, ma non normalizza il path sostituendo ad esempio i caratteri “.” e “..”
  • Il metodo normalize() della classe Path normalizza il path, sostituendo i caratteri “.” e “..” ma non lo rende in termini di path assoluto.
    • Per ottenere il path assoluto normalizzato, devono essere invocati entrambi
  • Il metodo mark(int limit) della classe BufferedReader marca la posizione corrente come punto da cui ripartire in caso di reset()
  • Il WatchService monitora solo le modifiche effettuate sulla directory registrata SENZA considerare le sottodirectories.
    • Se si vogliono monitorare anche le sottodirectories occorre registrare anch’esse esplicitamente al WatchService.
  • La classe FileOutputStream NON fornisce il metodo writeByte e gli altri metodi per la scrittura di tipi primitivi, ma solo un generico metodo write.
    • La classe DataOutputStream invece fornisce i metodi per la scrittura dei tipi primitivi, come ad esempio: writeBoolean, writeChar, writeByte, ecc..
  • Il metodo isSameFile della classe Files restituisce true se, e solo se, i 2 oggetti Path presi in input puntano allo stesso file.
    • Non conta il contenuto del file: se copio lo stesso file in un’altra directory e poi invoco isSameFile tra i 2 Path, ottengo false.
This entry was posted in $1$s. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *