Java - end of the road for Paths
Java introduced NIO 2 APIs with version 1.7. I wrote an article several years ago, after seeing not many developers make use of the new API. With this API, you would use java.nio.file.Path
instead of java.io.File
to represent a file.
To get an instance of Path
one had to use java.nio.file.Paths
as follows.
Path path = Paths.get("/Users/naresha/temp/readme.txt");
System.out.println(path.getFileName()); // println readme.txt
There was one thing that took me a while to get used to. If I want to work with the path
object, I could do it as follows.
System.out.println(Files.exists(path));
Stream<String> lines = Files.lines(path);
System.out.println(lines.count());
As you would have noticed, all those methods to work with Path
objects are present in class java.nio.file.Files
, while I would expect them in java.nio.file.Paths
. Paths
needed only to get an instance of Path
.
With Java 11, you don't need the Paths
class anymore. Now you can get an instance of Path
as follows.
Path path = Path.of("/Users/naresha/temp/readme.txt");
Also, the method Paths.get
now delegates to Path.of
. The documentation of Paths
recommends the use of Path.of
and mentions the possibilities of it getting deprecated in the future. Well, this wouldn't have been possible without the support for static methods in interfaces (note that Path
is an interface). So obviously they couldn't have thought about this design in Java 1.7.