Con java 7 abbiamo un package java.nio.file con interessanti feature per lo scandagliamento del file System.
Una di queste è rappresentato dall'interfaccia java.nio.Path che consente di ottenere molte informazioni con metodi semplici ed intuitivi.
Si crea una implementazione di tale interfaccia chiamando il metodo statico get sulla classe Paths.
Esempio:
Ci fornisce l'output seguente:
prof
c:\
c:\lav\trash
lav
trash
prof
In questo altro esempio ho preso il path relativo al progetto Java di test, utilizzando anche ulteriori metodi dell'interfaccia come il toAbsolutePath() o il toUri().
Risultato:
File name: src
Root: null
Parent: null
src
Absolute path: C:\lav\workspace\wsTest\Java7Cert\src
Uri: file:///C:/lav/workspace/wsTest/Java7Cert/src/
Path normalized:src
Real path: C:\lav\workspace\wsTest\Java7Cert\src
In particolare:
Una di queste è rappresentato dall'interfaccia java.nio.Path che consente di ottenere molte informazioni con metodi semplici ed intuitivi.
Si crea una implementazione di tale interfaccia chiamando il metodo statico get sulla classe Paths.
Esempio:
package it.test;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathExample {
public static void main(String[] args) {
Path p=Paths.get("c:\\lav\\trash\\prof");
System.out.println(p.getFileName());
System.out.println(p.getRoot());
System.out.println(p.getParent());
for(Path element:p){
System.out.println(element.toString());
}
}
}
Ci fornisce l'output seguente:
prof
c:\
c:\lav\trash
lav
trash
prof
In questo altro esempio ho preso il path relativo al progetto Java di test, utilizzando anche ulteriori metodi dell'interfaccia come il toAbsolutePath() o il toUri().
package it.test;
import java.io.IOException;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathExample {
public static void main(String[] args) throws IOException {
Path p=Paths.get("src");
System.out.println("File name: "+p.getFileName());
System.out.println("Root: "+p.getRoot());
System.out.println("Parent: "+p.getParent());
for(Path element:p){
System.out.println(element.toString());
}
System.out.println("Absolute path: "+p.toAbsolutePath());
System.out.println("Uri: "+p.toUri());
System.out.println("Path normalized:"+p.normalize().toString());
System.out.println("Real path: "+p.toRealPath(LinkOption.NOFOLLOW_LINKS));
}
}
Risultato:
File name: src
Root: null
Parent: null
src
Absolute path: C:\lav\workspace\wsTest\Java7Cert\src
Uri: file:///C:/lav/workspace/wsTest/Java7Cert/src/
Path normalized:src
Real path: C:\lav\workspace\wsTest\Java7Cert\src
In particolare:
- toUri() ritorna un path che può essere aperto da un browser ;
- toAbsolutePath() ritorna il path assoluto dato un path relativo;
- normalize() rimuove simboli non necessari (es. "." e "..");
- toRealPath() ritona il path assoluto e normalizzato e può risolvere anche i symbolic link (nel caso in esame usando l'opzione NOFOLLOWLINKS è stato scelto di non considerare i link simbolici. A differenza degli altri metodi esposti però se il file non esiste fisicamente lancia una eccezione tipo IOException.
- compareTo che effettua un confronto puramente lessicografico e torna 0 se i path sono uguali;
- equals() che effettua un confronto reale tra i path (ma bisogna accertarsi che i percorsi di entrambi i path siano percorsi assoluti).
// comparing paths
Path p2=Paths.get("C:\\lav\\workspace\\wsTest\\Java7Cert\\src");
System.out.println(p.compareTo(p2)==0?"OK":"KO");
System.out.println(p.equals(p2));
System.out.println(p.toAbsolutePath().equals(p2));
In questo caso ci torna prima KO, poi false e poi true (quando si confrontano i path entrambi assoluti).
Nessun commento:
Posta un commento