起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 使用Java复制文件的方法

使用Java复制文件的方法

时间:2022-08-14 14:43:47来源:零基础学Java 作者:Java学习网 已有: 名学员访问该课程

  快捷搜索:java复制文件

前言: 在Java教程中,大家学到了很多关于Java的课程,接下来IT培训网小编将介绍在 Java 中复制文件的常用方法。 首先,我

在Java教程中,大家学到了很多关于Java的课程,接下来IT培训网小编将介绍在 Java 中复制文件的常用方法。

首先,我们将使用标准IO和NIO.2 API,以及两个外部库:commons-io和guava。

1. IO API(JDK7之前)

首先,要使用 java.io API复制文件,我们需要打开一个流,遍历内容并将其写入另一个流:

@Test
public void givenIoAPI_whenCopied_thenCopyExistsWithSameContents() 
  throws IOException { 
    File copied = new File("src/test/resources/copiedWithIo.txt");
    try (
      InputStream in = new BufferedInputStream(
        new FileInputStream(original));
      OutputStream out = new BufferedOutputStream(
        new FileOutputStream(copied))) { 
        byte[] buffer = new byte[1024];
        int lengthRead;
        while ((lengthRead = in.read(buffer)) > 0) {
            out.write(buffer, 0, lengthRead);
            out.flush();
        }
    } 
    assertThat(copied).exists();
    assertThat(Files.readAllLines(original.toPath())
      .equals(Files.readAllLines(copied.toPath())));
}

实现这样的基本功能需要做很多工作。

对我们来说幸运的是,Java 改进了它的核心 API,并且我们有了使用NIO.2 API复制文件的更简单的方法。

2. NIO.2 API (JDK7)

使用NIO.2可以显着提高文件复制性能,因为NIO.2使用较低级别的系统入口点。

让我们仔细看看 Files. copy()方法有效。

copy()方法使我们能够指定表示复制选项的可选参数。默认情况下,复制文件和目录不会覆盖现有文件和目录,也不会复制文件属性。

可以使用以下复制选项更改此行为:

REPLACE_EXISTING –如果文件存在则替换它

COPY_ATTRIBUTES –将元数据复制到新文件

NOFOLLOW_LINKS –不应遵循符号链接

NIO.2 Files类提供了一组重载的copy ()方法,用于在文件系统中复制文件和目录。

让我们看一个使用带有两个Path参数的copy()的示例:

@Test
public void givenNIO2_whenCopied_thenCopyExistsWithSameContents() 
  throws IOException { 
    Path copied = Paths.get("src/test/resources/copiedWithNio.txt");
    Path originalPath = original.toPath();
    Files.copy(originalPath, copied, StandardCopyOption.REPLACE_EXISTING); 
    assertThat(copied).exists();
    assertThat(Files.readAllLines(originalPath)
      .equals(Files.readAllLines(copied)));
}

请注意,目录副本很浅,这意味着目录中的文件和子目录不会被复制。

3. Apache Commons IO

使用 Java 复制文件的另一种常用方法是使用commons-io库。

首先,我们需要添加依赖:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

最新版本可以从Maven Central下载。

然后,要复制文件,我们只需要使用 FileUtils 类中定义的copyFile ()方法。该方法采用源文件和目标文件。

让我们看一下使用copyFile()方法的 JUnit 测试:

@Test
public void givenCommonsIoAPI_whenCopied_thenCopyExistsWithSameContents() 
  throws IOException {    
    File copied = new File(
      "src/test/resources/copiedWithApacheCommons.txt");
    FileUtils.copyFile(original, copied);    
    assertThat(copied).exists();
    assertThat(Files.readAllLines(original.toPath())
      .equals(Files.readAllLines(copied.toPath())));
}

4.Guava 库

最后,我们来看看 Google 的 Guava 库。

同样,如果我们想使用 Guava ,我们需要包含依赖项:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

最新版本可以在 Maven Central上找到。

这是 Guava 复制文件的方式:

@Test
public void givenGuava_whenCopied_thenCopyExistsWithSameContents() 
  throws IOException { 
    File copied = new File("src/test/resources/copiedWithGuava.txt");
    com.google.common.io.Files.copy(original, copied); 
    assertThat(copied).exists();
    assertThat(Files.readAllLines(original.toPath())
      .equals(Files.readAllLines(copied.toPath())));
}

如果想了解更多相关知识,可以关注一下IT培训网的Guava教程,里面有更丰富的知识等着大家去学习,希望对大家能够有所帮助。

文章出自:http://qh.itpxw.cn/peixun/software/2022123715.html

文章标题:使用Java复制文件的方法



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容