Skip to main content

File Copy Using Java NIO

I wanted to post this small piece of code for those who are looking for it. Copying file contents using Streams is old way of doing, Java New IO is the way to go; using Java NIO is better in terms of performance.
Following is the code to do file copy using Java NIO.

public static void copyFile(File src, File dest) throws IOException {
    if (!src.exists()) {
        // either return quietly OR throw an exception
        return;
    }
    if (!dest.exists()) {
        dest.createNewFile();
    } 

    FileChannel source = new FileInputStream(src).getChannel();
    try {
        FileChannel destination = new FileOutputStream(dest).getChannel();
        try {
            source.transferTo(0, source.size(), destination);
            // destination.transferFrom(source, 0, source.size());
        } finally {
            if (destination != null) {
                destination.close();
            }
        }
    } finally {
        if (source != null) {
            source.close();
        }
    }
} 

By using NIO classes, we don’t need to create those byte buffers, loop through and copy in chunks, etc. NIO code is clean and simple, below line of code is the one responsible for copying file content.

source.transferTo(0, source.size(), destination); 

Quite simple isn’t it. It gets even simpler in Java7, all we need is one line of code as given below

Files.copy(src, dest);

// OR

Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING);

In the above line of code ‘src’ and ‘dest’ are not instances of java.io.File class, but they are of type "java.nio.file.Path". You can get Path object instance either by calling "toPath()" method on "java.iolFile" class object, OR creating one by calling the "getPath()" method on "java.nio.file.FileSystem" object.

FileSystems.getDefault().getPath("logs", "access.log");

The above line of code will give you an instance of ‘java.nio.file.Path’, which points to a file ‘access.log’ available in ‘logs’ directory, path is relative to current directory ["./logs/access.log"]. You can find more information @ http://today.java.net/pub/a/today/2008/07/03/jsr-203-new-file-apis.html

Comments

Popular posts from this blog

Simple Accordion using Java Script and CSS

Well you can find many online, but it's difficult to find one with out any dependent API. Most of the available accordions use other APIs for animation and other stuff. For those who just want accordion with out any other stuff, this one is the perfect one. It's very simple and you don't have to be a geek to understand it. Basic knowledge of Java script and CSS will do to understand how this works. In this article I'll take you through the steps of developing an accordion. Couple of minutes you are ready to write your own. Well then let's start developing one. Layout of the HTML block looks something like the one below Lets look at the CSS first which is very simple. /** container styles **/ .ra-p, .ra-cp { padding: 0 0 0.1em; } /**** heading styles ****/ .ra-p h2, .ra-cp h2 { margin: 0px; padding: 0.2em; cursor: pointer; color: #fff; background-color: #3d80b0; } /**** collapsed heading styles ****/ .ra-cp h...

Hosting Multiple Domains In Tomcat

Tomcat allows us to host multiple domains in one instance, using multiple ' Host ' tags. In this article I will explain how to do it on Tomcat. This is very simple configuration using ' Host ' tags in your server.xml . A novice can also understand this configuration very easily. Before going into the details of the configuration first lets have a look at the ' Host ' tag, ' Context ' tag and ' Alias ' tags first. <Host name="domain1" appBase="[application base]" autoDeploy="[true/false]" unpackWARs="[true/false]"> <Alias>...</Alias> <Context path="" docBase="" reloadable="[true/false]"/> </Host> First lets have a look at ' Alias ' tag. This tag is used to provide aliases for your actual domain. For example you have a domain called 'domain1.com', and you want to run the same application for 'www.do...