Advanced Java Services | File, Files, Paths, Path, FileSystems, FileSystem, FileStore |
Mit Java 7 wurden die Funktionalitäten des Packages java.io neu strukturiert, überarbeitet, erweitert und teilweise in die Klassen der folgenden Packages übertragen.
Dies betrifft zu einem Großteil die Klasse java.io.File, deren Funktionalitäten von den neuen Klassen java.nio.file.Files, java.nio.file.FileSystem, java.nio.file.FileStore und java.nio.file.Path übernommen worden sind. Hier betrahcten wir zunächst nur wie man die Möglichkeiten der Klasse File in die neuen Klassen transportiert hat.
Man braucht eine Weile, um hier wirklich die Übersicht zu bekommen. Die Pfeile geben hier keinen Vererbung an, sondern symbolisieren Methoden, die von einer Klasse zur anderen führen.
Fangen wir mit den FactoryKlassen an.
Die finale Klasse java.nio.file.Files ist Eine Hilfsklasse mit ausschließlich statischen Methoden. Die meisten dieser Methoden liefern Objekt der Klasse Path zurück, dem Nachfolger der Klasse File. Files übernimmt einen Teil der Methoden aus der Klasse java.io.File. Einen weiteren Teil der Funktionalitäten übernimmt die Implementierung des Interfaces java.nio.file.Path. Weiter unten findet man eine Tabelle, die aufzeigt, wohin die Methoden der Klasse File gewandert sind. Die Klasse Files liefert auch wichtige neue Methoden zum Lesen und Schreiben von Dateien.
Die Klassen FileSystems ist final und besitzt fünf statische Methoden, die jeweils ein Objekt vom Typ FileSystem liefern. Die wichtigste liefert das lokale Dateisystem.
FileSystem fileSystem = FileSystems.getDefault(); System.out.println(fileSystem); // sun.nio.fs.WindowsFileSystem
Paths erzeugt Objekte der Klasse Path und besitzt dazu genau zwei statische Methoden.
java.nio.file.Paths Methoden | |
---|---|
Returntyp | Name der Methode |
static Path |
get(String first, String... more) Converts a path string, or a sequence of strings that when joined form a path string, to a Path. |
static Path |
get(URI uri) Converts the given URI to a Path object. |
File file = new File("irgend/ein/pfad/foo.foo"); Path fromFile = file.toPath();
Path path = Paths.get("irgend/ein/pfad/foo.foo"); File file = path.toFile();
Die statische Methode get von Paths ist lediglich ein Shortcut für
Path path2 = FileSystems.getDefault().getPath("irgend/ein/pfad/foo.foo");
oder auch
Path path2 = FileSystems.getDefault().getPath("irgend","ein", "pfad", "/foo.foo");
Die folgende Graphik zeigt eine Übersicht über die Wanderbewegungen. Hier zeigen die Pfeile keine Vererbungen an. Die Details finden sich in den anschließenden Tabellen.
Nützlich sind auch die Erläuterungen und die Tabelle auf Legacy File I/O Code von Oracle, auf der die folgenden Tabellen basieren, die die einzelnen Wanderbewegungen zeigen.
java.io.File | java.nio.file.Files | ||
---|---|---|---|
Returntyp | Name der Methode | static Returntyp | Name der Methode |
boolean | canExecute() | boolean | isExecutable(Path path) |
boolean | canRead() | boolean | isReadable(Path path) |
boolean | canWrite() | boolean | isWritable(Path path) |
boolean | createNewFile() | Path | createFile(Path path, FileAttribute<?>... attrs) |
static File | createTempFile(String prefix, String suffix) | Path | createTempFile(String prefix, String suffix, FileAttribute<?>... attrs) |
static File | createTempFile(String prefix, String suffix, File directory) | Path | createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs) |
boolean | delete() | void | delete(Path path) |
void | deleteOnExit() | void | Replaced by the DELETE_ON_CLOSE option specified in the createFile method |
boolean | exists() | boolean | exists(Path path, LinkOption... options) |
boolean | notExists(Path path, LinkOption... options) | ||
boolean | isDirectory() | boolean | isDirectory(Path path, LinkOption... options) |
boolean | isFile() | boolean | isRegularFile(Path path, LinkOption... options) |
boolean | isHidden() | boolean | isHidden(Path path) |
long | lastModified() | FileTime | getLastModifiedTime(Path, LinkOption...) |
long | length() | long | size(Path path) |
String[] | list() | DirectoryStream<Path> | newDirectoryStream(Path dir) |
File[] | listFiles() | ||
String[] | list(FilenameFilter filter) | DirectoryStream<Path> | newDirectoryStream(Path dir, String glob) oder newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) |
File[] | listFiles(FileFilter filter) | ||
File[] | listFiles(FilenameFilter filter) | ||
boolean | mkdir() | Path | createDirectory(Path dir, FileAttribute<?>... attrs) |
boolean | mkdirs() | Path | createDirectories(Path dir, FileAttribute<?>... attrs) |
boolean | renameTo(File dest) | Path | Files.move(Path source, Path target, CopyOption... options) |
boolean | setExecutable() | boolean | setAttribute(Path, String, Object, LinkOption...) |
boolean | setReadable() | ||
boolean | setReadOnly() | ||
boolean | setWritable() | ||
boolean | setLastModified(long) | Path | setLastMOdifiedTime(Path, FileTime) |
Path ist der eigentliche Nachfolger von File.
java.io.File | java.nio.file.Path | ||
---|---|---|---|
Returntyp | Name der Methode | Returntyp | Name der Methode |
File | new File(File parent, String child) | Path | resolve(Path child) |
File | new File(String parent, String child) | Path | resolve(String child) |
int | compareTo(File other) | int | compareTo(Path other) |
boolean | equals(Object ob) | boolean | equals(Object ob) |
File | getAbsoluteFile() | Path | toAbsolutePath(Path path) |
String | getAbsolutePath() | ||
File | getCanonicalFile() | Path | toRealPath(LinkOption... options) |
String | getCanonicalPath() | ||
URI | toURI() | URI | toURI() |
Ein FileSystem erhält man über die Factoryklasse java.nio.file.FileSystems.
FileSystem fileSystem = FileSystems.getDefault();
java.io.File | java.nio.file.FileSystem | ||
---|---|---|---|
Returntyp | Name der Methode | Returntyp | Name der Methode |
static File[] | listRoots() | Iterable<Path> | getRootDirectories() |
Es gibt zwei Möglichkeiten zu einem FileStoreobjekt zu kommen. Mit der Klasse Files erhält man den FileStore zu einem Pathobjekt.
FileStore fileStore = Files.getFileStore(Path path);
Man kann sich auch alle Store zu einem FileSystem holen.
Iterable<FileStore> fileStore = FileSystems.getDefault().getFileStores();
java.io.File | java.nio.file.FileStore | ||
---|---|---|---|
Returntyp | Name der Methode | Returntyp | Name der Methode |
long | getTotalSpace() | long | getTotalSpace() |
long | getFreeSpace() | long | getUnallocatedSpace() |
long | getUsableSpace() | long | getUsableSpace() |