Java programmer seems to live in two worlds. One is the object-oriented world of classes, interfaces, methods, accessibility, and more advanced notions such as patterns, refactorings, aspects, and concerns. The other worldthe "real world"is absolutely independent from the first. It consists of files, folders, copy, compare, and
operations. Anybody who regularly switches between Perl and Java can find Java, an otherwise versatile and beautiful language, strangely awkward by comparison. It can seem to lack Perl's elementary operationsoperations that have nothing to do with an object model but are essential for down-to-earth programs that deal with the contents of our hard drives.
The Files utility in the MyJavaTools project, a site where I publish freely available, general-purpose Java tools, bundles all the methods and helper classes that Java is missing into one class. This article explores the methods this utility class offers and describes their functionality with regards to J2SE 5.0.
Under the Hood
The methods that the Files utility class provides are very simple:
- For a filename string, two methods,
filename(), return the directory name and the file namelike in Perl.
getFullPath() returns the full path for a file or a string that contains a file path.
path(String dirname, String filepath) calculates the absolute path for a directory and a filepath. If filepath is absolute, it returns it. Otherwise, it is remains relative in the directory specified by dirname.
getcwd() returns the current directory name (the contents of the
user.dir system property).
deleteFile(File file) and
deleteFile(String filename) remove a file or the whole tree if it is actually a directory.
find(File directory, Pattern pattern),
find(String dirname, Pattern pattern), and
find(Strind dirname, String pattern) look within the tree for files whose names satisfy the regexp pattern specified.
findLatest(String dirname, String pattern),
findLatestDirectory(String directory, String pattern), and
findLatestFile(String dirname, String pattern) are similar to
find() above, but they return at most one file or directory, the one with the latest timestamp. I have found them unusually useful in discovering changes in real time.
I'd love to have more methods of this kind, but some principal problems in Java prevent any platform-independent implementation.