Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Java
Expertise: Beginner
Jun 6, 2000

Copying Files

Question:
Is there a simple way of copying a file from one directory to another?

Answer:
There is no predefined convenient method for copying a file from one place to another. You have to do it the old fashioned way.

Open the source file, open the destination file, read the source file a chunk at a time into a buffer, and write the buffer to the destination file. Here is some sample code for doing that, with minimal error checking:


import java.io.*;

public class copy {
  public static final int BUFFER_SIZE = 4096;

  public static final void copyStream(InputStream input, OutputStream output,
                                      byte[] buffer)
    throws IOException
  {
    int bytesRead;

    while((bytesRead = input.read(buffer)) != -1)
      output.write(buffer, 0, bytesRead);
  }

  public static final void main(String[] args) {
    byte[] buffer = new byte[BUFFER_SIZE];
    BufferedInputStream input;
    BufferedOutputStream output;
    File destination;

    if(args.length < 2) {
      System.err.println("Usage: copy file1 file2 ... dest");
      return;
    }

    try { 
      destination = new File(args[args.length - 1]);
      buffer = new byte[BUFFER_SIZE];

      if(args.length > 2 || destination.isDirectory()) {
        if(!destination.isDirectory()) {
          System.err.println(
     "When copying multiple files, last argument must be a directory.");
          return;
        }

        for(int i=0; i < (args.length - 1); ++i) {
          File inFile;

          inFile = new File(args[i]);

          input =
            new BufferedInputStream(new FileInputStream(inFile));

          output =
            new BufferedOutputStream(new FileOutputStream(
                        new File(destination, inFile.getName())));

          copyStream(input, output, buffer);

          input.close();
          output.close();
        }
      } else {
        input =
          new BufferedInputStream(new FileInputStream(args[0]));
        output =
          new BufferedOutputStream(new FileOutputStream(destination));

        copyStream(input, output, buffer);

        input.close();
        output.close();
      }
    } catch(IOException ioe) {
      ioe.printStackTrace();
      return;
    }
  }
}
DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap