Heim >Java >JavaBase >Wie kopiere ich Dateien in Java?

Wie kopiere ich Dateien in Java?

尚
Original
2019-12-03 13:35:398857Durchsuche

Wie kopiere ich Dateien in Java?

So kopieren Sie Dateien in Java: (Empfohlen: Java-Video-Tutorial)

1. Verwenden FileStreams-Kopieren

Dies ist die klassischste Methode, den Inhalt einer Datei in eine andere zu kopieren. Verwenden Sie FileInputStream, um die Bytes von Datei A zu lesen, und verwenden Sie FileOutputStream, um in Datei B zu schreiben. Dies ist der Code für die erste Methode:

private static void copyFileUsingFileStreams(File source, File dest)
        throws IOException {    
    InputStream input = null;    
    OutputStream output = null;    
    try {
           input = new FileInputStream(source);
           output = new FileOutputStream(dest);        
           byte[] buf = new byte[1024];        
           int bytesRead;        
           while ((bytesRead = input.read(buf)) != -1) {
               output.write(buf, 0, bytesRead);
           }
    } finally {
        input.close();
        output.close();
    }
}

Wie Sie sehen können, führen wir mehrere Lese- und Schreibvorgänge für die Versuchsdaten durch, daher sollte dies ein ineffizienter Vorgang sein, wie wir in der nächsten neuen Methode sehen werden .

2. Verwenden Sie FileChannel zum Kopieren

Java NIO enthält die transferFrom-Methode, die laut Dokumentation schneller sein sollte als das Kopieren von Dateiströmen. Dies ist der Code für die zweite Methode:

private static void copyFileUsingFileChannels(File source, File dest) throws IOException {    
        FileChannel inputChannel = null;    
        FileChannel outputChannel = null;    
    try {
        inputChannel = new FileInputStream(source).getChannel();
        outputChannel = new FileOutputStream(dest).getChannel();
        outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
    } finally {
        inputChannel.close();
        outputChannel.close();
    }
}

3. Verwenden Sie Commons IO zum Kopieren

Apache Commons IO bietet eine Methode zum Kopieren von Dateien seine FileUtils-Klasse, die zum Kopieren einer Datei an einen anderen Ort verwendet werden kann. Es ist sehr praktisch, die Apache Commons-Klasse FileUtils zu verwenden, die Sie bereits in Ihrem Projekt verwenden. Grundsätzlich verwendet diese Klasse intern Java NIO FileChannel. Dies ist der Code der dritten Methode:

 private static void copyFileUsingApacheCommonsIO(File source, File dest)
         throws IOException {
     FileUtils.copyFile(source, dest);
 }

Der Kerncode dieser Methode lautet wie folgt:

private static void doCopyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException {
        if (destFile.exists() && destFile.isDirectory()) {
            throw new IOException("Destination '" + destFile + "' exists but is a directory");
        }

        FileInputStream fis = null;
        FileOutputStream fos = null;
        FileChannel input = null;
        FileChannel output = null;
        try {
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);
            input  = fis.getChannel();
            output = fos.getChannel();
            long size = input.size();
            long pos = 0;
            long count = 0;
            while (pos < size) {
                count = size - pos > FILE_COPY_BUFFER_SIZE ? FILE_COPY_BUFFER_SIZE : size - pos;
                pos += output.transferFrom(input, pos, count);
            }
        } finally {
            IOUtils.closeQuietly(output);
            IOUtils.closeQuietly(fos);
            IOUtils.closeQuietly(input);
            IOUtils.closeQuietly(fis);
        }

        if (srcFile.length() != destFile.length()) {
            throw new IOException("Failed to copy full contents from '" +
                    srcFile + "' to '" + destFile + "'");
        }
        if (preserveFileDate) {
            destFile.setLastModified(srcFile.lastModified());
        }
    }

Es ist ersichtlich, dass das Prinzip der Verwendung von Apache Commons IO zum Kopieren von Dateien das ist zweite Methode oben: Verwenden Sie FileChannel copy

Viertens verwenden Sie die Files-Klasse von Java7 zum Kopieren

Wenn Sie etwas Erfahrung mit Java 7 haben Möglicherweise wissen Sie, dass Sie die Dateikopiermethode der Dateiklasse verwenden können, um von einer Datei in eine andere zu kopieren. Dies ist der Code der vierten Methode:

 private static void copyFileUsingJava7Files(File source, File dest)
         throws IOException {    
         Files.copy(source.toPath(), dest.toPath());
}

Für weitere Java-Kenntnisse beachten Sie bitte die Spalte Java Basic Tutorial.

Das obige ist der detaillierte Inhalt vonWie kopiere ich Dateien in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn