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

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