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.
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 {
        // Pfade entsprechend anpassen
        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 = new FileInputStream(in).getChannel();
        FileChannel outChannel = new FileOutputStream(out).getChannel();
        try {
            inChannel.transferTo(0, inChannel.size(), outChannel);
        } catch (IOException e) {
            throw e;
        } finally {
            if (inChannel != null)
                inChannel.close();
            if (outChannel != null)
                outChannel.close();
        }
    }
}
letzte Änderung an:
switch-case-Verzweigung