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;
}
}
}