如何在 Java 中复制文件或目录

x33g5p2x  于2021-10-16 转载在 Java  
字(1.9k)|赞(0)|评价(0)|浏览(461)

在本文中,您将学习如何使用 Files.copy()BufferedInputStreamBufferedOutputStream 等各种方法在 Java 中复制文件或目录。

Java 复制文件使用 Files.copy()

Java NIO 的 Files.copy() 方法是在 Java 中复制文件的最简单方法。

import java.io.IOException;
import java.nio.file.*;

public class CopyFileExample {
    public static void main(String[] args) {

        Path sourceFilePath = Paths.get("./bar.txt");
        Path targetFilePath = Paths.get(System.getProperty("user.home") + "/Desktop/bar-copy.txt");

        try {
            Files.copy(sourceFilePath, targetFilePath);
        } catch (FileAlreadyExistsException ex) {
            System.out.println("File already exists");
        } catch (IOException ex) {
            System.out.format("I/O error: %s%n", ex);
        }
    }
}

如果目标文件已经存在,Files.copy() 方法将抛出 FileAlreadyExistsException。如果你想替换目标文件,那么你可以像这样使用 REPLACE_EXISTING 选项 -

Files.copy(sourceFilePath, targetFilePath, StandardCopyOption.REPLACE_EXISTING);

请注意,可以使用相同的方法复制目录。但是,目录中的文件不会被复制,因此即使原始目录包含文件,新目录也会是空的。

**阅读:**如何在 Java 中递归复制目录

使用 BufferedInputStream 和 BufferedOutputStream 的 Java 复制文件

您还可以使用字节流 I/O 逐字节复制文件。以下示例使用 BufferedInputStream 将文件读入字节数组,然后使用 BufferedOutputStream 写入字节数组。

您也可以直接使用 FileInputStreamFileOutputStream 来执行读写操作。但是缓冲 I/O 的性能更高,因为它缓冲数据并以块的形式读取/写入数据。

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CopyFileExample1 {
    public static void main(String[] args) {
        Path sourceFilePath = Paths.get("./bar.txt");
        Path targetFilePath = Paths.get(System.getProperty("user.home") + "/Desktop/bar-copy.txt");

        try(InputStream inputStream = Files.newInputStream(sourceFilePath);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

            OutputStream outputStream = Files.newOutputStream(targetFilePath);
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream)) {

            byte[] buffer = new byte[4096];
            int numBytes;
            while ((numBytes = bufferedInputStream.read(buffer)) != -1) {
                bufferedOutputStream.write(buffer, 0, numBytes);
            }
        } catch (IOException ex) {
            System.out.format("I/O error: %s%n", ex);
        }
    }
}

相关文章

微信公众号

最新文章

更多