Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: Path vs File

People also ask

What is the difference between path and file in Java?

In Java, Path, and File both are classes. They belong to different packages but perform the same mechanism. We can say that the Java Path class is the advanced version of the File class. We use both the classes for the File I/O operations.

What is the difference between path and file?

Just path is a file or directory named path in the current directory. ./path is a file or directory named path in the current directory, with the directory spelled out. The dot directory . represents the current directory, and path is the name of the file or directory within this directory.

Should I use file or path?

file. Path is better, but as long as there are still plenty of programs and text books using Java. io. File, if only for legacy reasons, it should not be considered deprecated, its too important.

What is Java path file?

A Java Path instance represents a path in the file system. A path can point to either a file or a directory. A path can be absolute or relative. An absolute path contains the full path from the root of the file system down to the file or directory it points to.


Long story short:

java.io.File will most likely never be deprecated / unsupported. That said, java.nio.file.Path is part of the more modern java.nio.file lib, and does everything java.io.File can, but generally in a better way, and more.

For new projects, use Path.

And if you ever need a File object for legacy, just call Path#toFile()

Migrating from File to Path

This Oracle page highlights differences, and maps java.io.File functionality to java.nio.file lib (including Path) functionality

Article by Janice J. Heiss and Sharon Zakhour, May 2009, discussing NIO.2 File System in JDK 7


can we consider it deprecated?

No, you can't consider it deprecated unless and until it is so marked in the File Javadoc.


Check this article about more info - http://www.oracle.com/technetwork/articles/javase/nio-139333.html

Basically file.Path will be the way to go from now on but as is widely known Java people tend to keep back-compatibility so I guess that's why they have left it.


I will complete the very good answer of @mmcrae.

is there any reason to use a java.io.File object any more or can we consider it deprecated?

JDK classes are very rarely deprecated.
You can see on the the JDK 8 API deprecates list all classes deprecated since the first JDK.
It contains only a little part of classes that the Oracle documentation and the Java community discourage to use.
java.util.Date, java.util.Vector, java.util.Hashtable... that are classes with so many defects are not deprecated.
But why ?
Because conceptually something of deprecated means still there but discourage to use as it will very certainly be removed.
Thousands of programs rely on these bad designed classes.
For such classes, Java API developers will not give such a signal.

Answer of @EJP is so really right :

Not unless and until it is so marked in the Javadoc.

So, I think that your question would make more sense in its terms :
"As we have the choice, should we use java.io.File or java.nio.file.Path for new developments and if the answer is java.nio.file.Path, could you easily take advantage of java.io.File for legacy projects using java.io.File ?"

I believe a java.nio.file.Path can do everything a java.io.File can do and more.

You have the answer.

This oracle tutorial about legacy IO confirms your thinking.

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.

The rename method 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 File methods 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.

With so many drawbacks for java.io.File, we need really no reason to use this class for new developments.
And even for legacy code using java.io.File, Oracle gives hints to use Path.

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.

The 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 Path class.

For example, assume you had some code that deleted a file:

file.delete();

You could modify this code to use the Files.delete method, as follows:

Path fp = file.toPath();
Files.delete(fp);

Yes, but many existing APIs, including Java7's own standard APIs, still work only with File type.