Copy a file

From CodeCodex

Contents

Implementations

These code examples demonstrate how to copy a system file.

Erlang

% copy files by name
file:copy("/path/to/file", "/path/to/other/phile").

% copy files by io_device
{ok, ID1} = file:open("/path/to/file", [read]).
{ok, ID2} = file:open("/path/to/other/phile", [write]).
file:copy(ID1, ID2).
ok = file:close(ID1).
ok = file:close(ID2).

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

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: $!";

Python

import shutil

# copy files by name
shutil.copyfile('/path/to/file', '/path/to/other/phile')

# copy file-objects
shutil.copyfileobj(src, dst)

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

Tcl

file copy /path/to/file /path/to/other/phile