How to copy a file in Java

The easiest way to copy a file in Java is to download the Apache Commons IO library; just download their library, then use the methods of their FileUtils class to copy a file.

However, if you're just as interested in the technical details of how to copy a file in Java, or just want a method to copy a file in Java, the method below, taken from my Java file utilities class, shows how this actually works:

public static void copyFile(File source, File destination) throws IOException
{
  byte[] buffer = new byte[100000];

  BufferedInputStream bufferedInputStream = null;
  BufferedOutputStream bufferedOutputStream = null;
  try
  {
    bufferedInputStream = new BufferedInputStream(new FileInputStream(source));
    bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(destination));
    int size;
    while ((size = bufferedInputStream.read(buffer)) > -1)
    {
      bufferedOutputStream.write(buffer, 0, size);
    }
  }
  catch (IOException e)
  {
    // TODO may want to do something more here
    throw e;
  }
  finally
  {
    try
    {
      if (bufferedInputStream != null)
      {
        bufferedInputStream.close();
      }
      if (bufferedOutputStream != null)
      {
        bufferedOutputStream.flush();
        bufferedOutputStream.close();
      }
    }
    catch (IOException ioe)
    {
      // TODO may want to do something more here
      throw ioe;
    }
  }
}

As you can see this is pretty straightforward. Just open a BufferedInputStream and a BufferedOutputStream and read from the first and write to the second. As you might guess, you use these buffered streams so you can treat the file contents as a series of bytes.

There is probably a better way to choose the buffer size than what I have shown here, but I've never dug into those details.

Java file copying references

Again, if you're going to be doing a lot of Java file reading, writing, copying, and deleting, take a look at the Apache Commons IO library.

As mentioned, if you're more interested in understanding how Java file utilities work, I also encourage you to take a look at my Java file utilities class.

I first developed these file utilities when I wrote a lot of Java Swing code many years ago, and (a) I don't remember the Commons IO library being available, and (b) if they were available, I was opposed to shipping a 1.2MB jar file with my Swing applications just to read, write, copy, and delete files. These days 1.2MB seems trivial, but at that time, when users were downloading my Java/Swing apps over slow internet connections, it was a pretty big deal.