Legacy File I/O Code
Prior to the Java SE 7 release, the
java.io.File class was the mechanism used for file I/O, but it had several drawbacks.
Many methods didn't throw exceptions when they failed, so it was impossible to obtain a useful error message. For example, if a file deletion failed, the program would receive a "delete fail" but wouldn't know if it was because the file didn't exist, the user didn't have permissions, or there was some other problem.
renamemethod didn't work consistently across platforms.
There was no real support for symbolic links.
More support for metadata was desired, such as file permissions, file owner, and other security attributes.
Accessing file metadata was inefficient.
Many of the
Filemethods didn't scale. Requesting a large directory listing over a server could result in a hang. Large directories could also cause memory resource problems, resulting in a denial of service.
It was not possible to write reliable code that could recursively walk a file tree and respond appropriately if there were circular symbolic links.
Perhaps you have legacy code that uses
java.io.File and would like to take advantage of the
java.nio.file.Path functionality with minimal impact to your code.
java.io.File class provides the toPath method, which converts an old style
File instance to a
java.nio.file.Path instance, as follows:
Path input = file.toPath();
You can then take advantage of the rich feature set available to the
For example, assume you had some code that deleted a file:
You could modify this code to use the
Files.delete method, as follows:
Path fp = file.toPath(); Files.delete(fp);
Conversely, the Path.toFile method constructs a
java.io.File object for a
Because the Java implementation of file I/O has been completely re-architected in the Java SE 7 release, you cannot swap one method for another method. If you want to use the rich functionality offered by the
java.nio.file package, your easiest solution is to use the File.toPath method as suggested in the previous section. However, if you do not want to use that approach or it is not sufficient for your needs, you must rewrite your file I/O code.
There is no one-to-one correspondence between the two APIs, but the following table gives you a general idea of what functionality in the
java.io.File API maps to in the
java.nio.file API and tells you where you can obtain more information.
|java.io.File Functionality||java.nio.file Functionality||Tutorial Coverage|
|The Path Class|
|The ||Random Access Files|
On UNIX file systems, the Managing Metadata (File and File Store Attributes) package is used to check the nine file permissions.
|Checking a File or Directory|
|The ||These methods are replaced by the ||Managing Metadata|
|Moving a File or Directory|
|Deleting a File or Directory|
|Replaced by the ||Creating Files|
Creating and Writing a File by Using Stream I/O
Reading and Writing Files by Using Channel I/O
|Verifying the Existence of a File or Directory|
|Comparing Two Paths|
|Converting a Path|
|Converting a Path (toRealPath)|
Removing Redundancies From a Path (normalize)
|Converting a Path|
|Retrieving Information About the Path|
|Listing a Directory's Contents|
|Creating a Directory|
|Listing a File System's Root Directories|
|File Store Attributes|