Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
In our previous video, I described how to copy the contents of the text file to a new text file, using tools that are available from the Java class library. I'm working in a copy of that project now called ApacheFileUtils that's a part of the exercise files for this course. In this application, I had to create a whole bunch of different objects two file object representing the existing file and the target file, an input stream and an output stream, a byte array, an integer, and then I had to loop through and read the file one set of bytes at a time and write out the new file.
To all new Java developers, this seems a bit cumbersome and almost everybody asks the question isn't there an easier way. The reality of the Java class library is that it tends to give you tools in very small pieces, and it's up to you the developer to figure out how to plug those tools together to get your work done, but the good news is that the Java programming language has been around a long time and the Java developer community has done a great job figuring out what were the most common tasks that everybody needs to do and those tasks tend to be encapsulated and delivered in a project called the Apache Commons.
You can get to the Apache Commons website at http://commons.apache.org. This project contains fully tested reusable Java components that are completely free and licensed for use on either Open Source or commercial applications, most of the components in the Apache Commons can be used in any Java development environment including console applications like the ones I've been showing here, but also including Java Enterprise Edition applications that is web applications and Android mobile applications.
To get to the Commons project we need, go to the Commons Proper from the homepage, you'll see that there are a whole bunch of different projects you can work with and we're going to work with this collection IO. On the IO page, you can click into utility classes and then scroll down in the list of classes, and you'll see a class listed there called File Utils. This is the class, that I'll be working with. The first step to using the class is to download the Commons IO package, I'll go back a couple steps in my browser, back to the IO page and in the Commons IO menu on the left, you'll click the download link.
There are two binary versions of the download a tar.gz version and zipped version. The zipped version should work fine for either Windows or Mac. Now, I've already downloaded and extracted the file to my desktop, I'll open the extracted folder and drill down, until I see these files. The zip file contains three jar files, I don't need the Java docs and I don't need the source files, what I need are the binaries, they will have a file extension of dot jar and the name commons-io and the version number.
I'm using version 2.1 but any later version should work pretty much the same. Now, to use this file in your project copy it to the clipboard then go to the folder that contains your project, I'm using Windows so I'll use Windows Explorer and I'll go to the 11 files folder and from there to ApacheFileUtils, now you can place this file anywhere on your disk you want to, but most Java developers place existing libraries into a folder named Lib, L-I-B.
So I'll create a new folder and I'll name it Lib or Lib or L-I-B, I'll drill down into that folder and paste the jar file, then I'll switch back to Eclipse. I'll go to the Package Explorer and refresh the view and show that the Lib folder and the jar file are now there. Now here's how you incorporate the jar file into your application, you have to add the jar file to something called the build path. A new Java project always includes these jar files that are a part of the Java runtime environment system library something I sometimes refer to as the Java class library.
You're adding your own jar file to the build path and here is the easiest way to do it. Right click on the jar file, choose Build Path, Add to Build Path and now, all the classes that are in that jar file are available to your project. Now we're going to replace some of the existing code, I'll double-click the editor to expand it to full screen and then I'm going to select starting at the input stream declaration and ending at the close calls. You're still going to need to create references to your files, the source file and the target file, but all this other more complex code won't be needed anymore you can just delete it.
Next, I'll call a method of the file utils class that's a member of the Apache Commons Library that I added to my project's build path. The particular method I need is a class method or a static method. So I'm going to call it directly from the class library, it'll be FileUtils. and here is a whole list of everything you're able to do with the class library, including copying files, getting directory information, moving files, reading files, and writing files.
And I'm going to use a method called copy file. There are a few different versions of it, it's an overloaded method but I'm going to use this version that accept two file references. There are two required methods, the source and destination. I'll set the first to f1 and the second to f2 and that's it, that's all the code I need. I remove these TODO commons because I really don't need to do anything else, I'll save and run the application and I get the message file copied.
I'll go back to my Package Explorer and I'll Refresh and I see my new target file has been successfully created. Now the magic of the Apache Commons approach is that you eliminate a whole bunch of complexity from your application, you'll notice that my application is showing these warnings about all the import statements my file still has but I'm not using. These are all the classes that were required when I was using the Java class library approach, that is, I was limiting myself to using only the tools that are available in the JRE.
But when you expand your world to include the Apache Commons, life gets a whole lot easier, I'm going to organize my imports by choosing Source > Organize Imports, and now I see that the only classes I'm using are the File class and the Exception classes. The code within the Commons class still might throw those exceptions, so I still need to refer to them but everything else is greatly simplified. I strongly encourage you to take a look through the documentation for the Apache Commons Libraries, for example, in the IO page, there's a link for the Java doc for version 2.1 and the class that we are using FileUtils has a listing of all the methods that are available, but you'll also see that there are dozens and dozens of other classes available.
And this is just one of the projects in Apache Commons, using the Apache Commons project can make your coding much simpler and your process of learning Java and making it useful for your applications a lot faster.
Get unlimited access to all courses for just $25/month.Become a member