Wie kann eine beliebige Datei kopiert werden?

Für den Zugriff auf Dateien bietet Java mit der Klasse FileChannel mannigfaltige Möglichkeiten:
Neben den üblichen Lese- und Schreibzugriffen können z.B. Bereiche direkt im Arbeitsspeicher abgebildet oder gelockt und in Abhängigkeit vom Betriebssystem geschwindigkeitsoptimiert kopiert werden.

Die Klasse deklariert eine Methode copyFile(File in, File out), der ein Eingabe- und ein Ausgabe-Filobjekt übergeben werden. Beide Dateien müssen existieren oder ggf. mit

File file = new File("/home/user/test.txt");
file.createNewFile();

erzeugt werden.
Zunächst werden von beiden File-Objekten über InputStreams deren FileChannels erzeugt. Die Methode FileChannel.transferTo() nimmt zwei long-Werte für den zu übertragenden Bereich und den schreibbaren Channel des Zielobjektes entgegen. Die Prozedur muss mit einem try-catch-Block abgesichert werden, da eine IOException geworfen werden kann. Nach Abschluss des Transfers müssen beide Channels wieder geschlossen werden.

package dateienUndVerzeichnisse;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class DateiKopierenClass {
    
    public static void main(String[] args) throws IOException {
        File inF = new File("/home/user/inputFile.txt");
        File outF = new File("/home/user/outputFile.txt");
        copyFile(inF, outF);
    }
    
    public static void copyFile(File in, File out) throws IOException {
        FileChannel inChannel = null;
        FileChannel outChannel = null;
        try {
            inChannel = new FileInputStream(in).getChannel();
            outChannel = new FileOutputStream(out).getChannel();
            inChannel.transferTo(0, inChannel.size(), outChannel);
        } catch (IOException e) {
            throw e;
        } finally {
            try {
                if (inChannel != null)
                    inChannel.close();
                if (outChannel != null)
                    outChannel.close();
            } catch (IOException e) {}
        }
    }
}