行业资讯 2025年08月6日
0 收藏 0 点赞 469 浏览 2373 个字
摘要 :

文章目录 1.使用NIO中的Files.copy() 2.使用FileChannel的transferTo() 3.使用Commons IO中的FileUtils 4.使用Guava中的Files 在应用程序中,将文件从一个位置复制到另……




  • 1.使用NIO中的Files.copy()
  • 2.使用FileChannel的transferTo()
  • 3.使用Commons IO中的FileUtils
  • 4.使用Guava中的Files

在应用程序中,将文件从一个位置复制到另一个位置是一个常见的任务。在这个Java教程中,我们将看到在Java中复制文件的不同方法。

请注意,文件复制不是一个原子操作 – 在发生I/O错误、断电、进程终止或其他问题的情况下,复制操作将不会完成。如果我们需要防范这些情况,我们应该采用其他文件级别的同步措施。

在所有给定的示例中,我们将复制testoriginal.txt的内容到另一个文件testcopied.txt。文件的名称和位置可以在任何示例中进行替换。

1.使用NIO中的Files.copy()

Files类位于java.nio.file包中。它提供了在文件、目录或其他类型的文件上操作的静态方法。

  • 默认情况下,如果目标文件已经存在或者是一个符号链接,则复制操作将失败,除非源文件和目标文件是相同的文件,在这种情况下,该方法将在不复制文件的情况下完成。
  • 如果文件是一个目录,它会在目标位置创建一个空目录(目录中的条目不会被复制)。

使用一个或多个CopyOption枚举来控制复制的方式。

  • REPLACE_EXISTING:将替换任何现有的目标文件。
  • COPY_ATTRIBUTES:从源文件复制文件属性到目标文件。
  • NOFOLLOW_LINKS:如果文件是一个符号链接,则复制的是符号链接本身,而不是链接的目标。
Path source = Paths.get(\"c:/temp/testoriginal.txt\");
Path target = Paths.get(\"c:/temp/testcopied.txt\");
Files.copy(source, target, StandardOption.REPLACE_EXISTING);

2.使用FileChannel的transferTo()

如果你喜欢FileChannel类因为它们的出色性能,可以使用这种方法。这里的关键优势在于,如果有的话,JVM将使用操作系统对DMA(直接内存访问)的访问。

使用这种技术,数据直接从磁盘传输到总线,然后传输到目的地…绕过了任何通过RAM或CPU的电路。

File fileTo = new File(\"c:/temp/testoriginal.txt\");
FileInputStream inputStream = new FileInputStream(fileToCopy);
FileChannel inChannel = inputStream.getChannel();
File newFile = new File(\"c:/temp/testcopied.txt\");
FileOutputStream outputStream = new FileOutputStream(newFile);
FileChannel outChannel = outputStream.getChannel();
inChannel.transferTo(0, fileToCopy.length(), outChannel);
inputStream.close();
outputStream.close();

3.使用Commons IO中的FileUtils

要使用Apache Commons IO,我们需要下载commons-io依赖并将其包含在项目中。

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

使用以下类之一将一个文件复制到另一个文件。

  • FileUtils – 在内部使用了java.nio.file.Files类,因此它相当于使用java.nio.file.Files.copy()函数。
  • IOUtils – 它将字节从一个大型(超过2GB)的InputStream复制到一个OutputStream。此方法使用提供的缓冲区,因此不需要使用BufferedInputStream。
File fileTo = new File(\"c:/temp/testoriginal.txt\");
File newFile = new File(\"c:/temp/testcopied.txt\");
FileUtils.copyFile(fileToCopy, newFile);
// 或
IOUtils.copy(new FileInputStream(fileToCopy), new FileOutputStream(newFile));

4.使用Guava中的Files

要使用Guava,我们需要下载com.google.guava依赖并将其包含在项目中。

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

Files类提供了用于处理文件的实用方法。Files.copy()方法将一个文件的所有字节复制到另一个文件中。

File fileTo = new File(\"c:/temp/testoriginal.txt\");
File newFile = new File(\"c:/temp/testcopied.txt\");
Files.copy(fileToCopy, newFile);

在Java 7之后,Java IO包没有进行过重大改进。因此,对于任何后续的Java版本(从Java 8到Java 14),我们必须依赖于上述列出的技术。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9448.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号