One of the biggest problems with pre-NIO.2 libraries was inefficient work with metadata of files and directories. Authors of NIO.2 library introduce concept of file attribute views to address this problem and also to solve couple of other issues that are dependent on this one. These problems included inability to create files with file attributes initialized at the creation time, inability to copy files with file attributes as well as problematic and inefficient way of handling file attributes. This concept was also adapted on file stores so the work with file system with regard to attributes and metadata feels seamless and consistent.
In order to work with file system one must first be able to point to files and directories. The first thing that needs to be understood is the role of
java.nio.file.Path class, the way instances are created and its functionality. As mentioned in previous articles,
Path is just an abstraction of the file system location. This allows for the situations when directory does not even have to exist. NIO.2 presents more elegant solutions for getting the object representing file system location. This shields programmer from platform specific problems.
Path instances allow two types of operations:
- syntactic operations
- any operations related to the Path representation itself – hierarchy traversal, conversion, comparison and so on
- file operations
- operations that modify location, state or contents of a file represented by a path instance
Java platform long needed tools to work with file systems that are not so limited as those of prior releases to Java 7. Programmers require consistent behavior throughout many different platforms and efficiency in gathering file attributes and other data (or metadata). When it comes to platform specific capabilities of certain file systems, Java should benefit from them and provide the means to harness their power. Last but not least, programmer should always receive concrete description of exceptional situations during execution of their code.
Ever since the dawn of Java programming there was always present certain need to communicate with file system. Whether it was to store some configuration, user-generated content or even to set up and maintain whole database for your application you were bound to face challenges of file system access from java some time in your career. Java libraries for file system access and manipulation came long way since its introduction back in ’96 when JDK 1.0 introduced package
Continue reading “Introduction to NIO.2”