📜  Java 复制文件 - Java (1)

📅  最后修改于: 2023-12-03 14:42:18.273000             🧑  作者: Mango

Java 复制文件

在Java中,我们可以使用几种不同的方法来复制文件。下面将介绍其中两种常见的方法。

1. 使用文件流
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopyExample {
    public static void main(String[] args) {
        String sourceFile = "path/to/source/file.txt";
        String destinationFile = "path/to/destination/file.txt";

        try (FileInputStream fis = new FileInputStream(sourceFile);
             FileOutputStream fos = new FileOutputStream(destinationFile)) {

            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                fos.write(buffer, 0, length);
            }
            System.out.println("文件复制成功!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

通过使用FileInputStreamFileOutputStream类,我们可以读取源文件并将其写入目标文件。首先,我们创建两个文件输入流和输出流对象,并指定源文件和目标文件的路径。然后,我们使用一个字节数组作为缓冲区来循环读取源文件的内容,并将其写入目标文件中,直到文件的末尾。最后,关闭输入流和输出流。

2. 使用文件通道和字节缓冲区
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class FileCopyExample {
    public static void main(String[] args) {
        String sourceFile = "path/to/source/file.txt";
        String destinationFile = "path/to/destination/file.txt";

        try (FileChannel sourceChannel = new RandomAccessFile(sourceFile, "r").getChannel();
             FileChannel destinationChannel = new RandomAccessFile(destinationFile, "rw").getChannel()) {

            ByteBuffer buffer = ByteBuffer.allocate(1024);
            while (sourceChannel.read(buffer) != -1) {
                buffer.flip();
                destinationChannel.write(buffer);
                buffer.clear();
            }
            System.out.println("文件复制成功!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这种方法中,我们使用FileChannelByteBuffer类来实现文件复制。首先,我们创建两个文件通道对象,并分别指定源文件和目标文件的路径。然后,我们创建一个字节缓冲区,并循环读取源文件并写入目标文件,直到源文件的末尾。在每次循环中,我们需要调用flip()方法来准备写入缓冲区,并在写入目标文件后调用clear()方法来准备下一次读取。

以上是两种基本的复制文件的方法,当然还有其他更高级的方法可以使用,例如使用Java NIO的文件传输方法或使用第三方库。无论使用哪种方法,都要记得在完成文件操作后关闭文件流或通道,释放系统资源。