Java复制文件到指定路径

在开发过程中,我们经常需要操作文件,其中一个常见的需求就是将文件从一个路径复制到另一个路径。Java提供了多种方式来实现文件复制,本文将介绍如何使用Java代码复制文件到指定路径,并提供相应的代码示例。

1. 使用Java IO流复制文件

Java IO流提供了一种简单的方式来复制文件。我们可以通过读取源文件的内容,然后将其写入目标文件中来完成复制操作。以下是使用Java IO流复制文件的示例代码:

import java.io.*;

public class FileCopyExample {
    public static void copyFile(String sourcePath, String destinationPath) {
        try {
            File sourceFile = new File(sourcePath);
            File destinationFile = new File(destinationPath);

            // 创建输入流和输出流
            FileInputStream inputStream = new FileInputStream(sourceFile);
            FileOutputStream outputStream = new FileOutputStream(destinationFile);

            // 创建缓冲区
            byte[] buffer = new byte[1024];
            int length;

            // 读取源文件并写入目标文件
            while ((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }

            // 关闭输入流和输出流
            inputStream.close();
            outputStream.close();

            System.out.println("文件复制成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String sourcePath = "path/to/source/file.txt";
        String destinationPath = "path/to/destination/file.txt";
        copyFile(sourcePath, destinationPath);
    }
}

在上述代码中,我们定义了一个copyFile方法,该方法接受源文件路径和目标文件路径作为参数。在方法内部,我们创建了输入流和输出流,并通过缓冲区逐个字节地读取源文件并写入目标文件中。最后,我们关闭输入流和输出流,并打印出文件复制成功的提示信息。

2. 使用Java NIO复制文件

Java NIO(New IO)提供了一种非阻塞的IO操作方式,相比于Java IO流,它在处理大量数据时具有更好的性能。下面是使用Java NIO复制文件的示例代码:

import java.nio.channels.FileChannel;
import java.nio.file.*;

public class FileCopyExample {
    public static void copyFile(String sourcePath, String destinationPath) {
        try {
            Path source = Paths.get(sourcePath);
            Path destination = Paths.get(destinationPath);

            // 创建源文件和目标文件的通道
            FileChannel sourceChannel = FileChannel.open(source);
            FileChannel destinationChannel = FileChannel.open(destination, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE);

            // 复制文件
            sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);

            // 关闭通道
            sourceChannel.close();
            destinationChannel.close();

            System.out.println("文件复制成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String sourcePath = "path/to/source/file.txt";
        String destinationPath = "path/to/destination/file.txt";
        copyFile(sourcePath, destinationPath);
    }
}

在上述代码中,我们使用Paths.get方法创建了源文件和目标文件的Path对象。然后,我们通过FileChannel.open方法打开源文件和目标文件的通道。接下来,我们使用transferTo方法将源文件的内容复制到目标文件中。最后,我们关闭了通道,并打印出文件复制成功的提示信息。

序列图

下面是文件复制过程的序列图:

sequenceDiagram
    participant SourceFile
    participant DestinationFile
    participant FileInputStream
    participant FileOutputStream

    SourceFile->>FileInputStream: 读取文件
    FileInputStream->>DestinationFile: 写入文件
    FileInputStream->>FileInputStream: 关闭流
    FileOutputStream->>FileOutputStream: 关闭流
    SourceFile->>DestinationFile: 文件复制成功

状态图

下面是文件复制过程的状态图:

stateDiagram
    [*] --> 获取源文件和目标文件路径
    获取源文件和目标文件路径 --> 创建输入流和输出流
    创建输入流和输出流 --> 读取源文件并写入目标文件
    读取源文件并写入目标文件 --> 关闭输入流和输出流
    关闭输入流和输出流 --> 文件复制成功
    文件复制成功 --> [*