Copy a file
From CodeCodex
Contents |
[edit] Implementations
[edit] Java
// Copies src file to dst file.
// If the dst file does not exist, it is created
void copy(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
- Original Source: The Java Developers Almanac 1.4
Copies or moves a file without a loop. Although I'm not sure, I believe using a FileChannel allows the OS to short-circuit the operation (without actually transferring the data through Java code).
public void copy(File src, File dest, boolean move) throws Exception {
// Create channel on the source
FileChannel srcChannel = new FileInputStream(src).getChannel();
// Create channel on the destination
FileChannel dstChannel = new FileOutputStream(dest).getChannel();
// Copy file contents from source to destination
dstChannel.transferFrom(srcChannel, 0, srcChannel.size());
// Close the channels
srcChannel.close();
dstChannel.close();
if(move) src.delete();
}
[edit] Perl
use File::Copy;
# copy files by name
copy('/path/to/file', '/path/to/other/phile') or die "Copy failed: $!";
# copy filehandle references
copy($src, $dst) or die "Copy failed: $!";
[edit] Python
import shutil
# copy files by name
shutil.copyfile('/path/to/file', '/path/to/other/phile')
# copy file-objects
shutil.copyfileobj(src, dst)
[edit] Ruby
require 'fileutils'
# copy files by name
src = '/path/to/file'
dst = '/path/to/other/phile'
FileUtils.copy src, dst
# copy file-objects
open(src, "r") do |f1|
open(dst, "w") do |f2|
FileUtils.copy_stream f1, f2
end
end

