在Java中复制文件的唯一方法是打开流、声明缓冲区、读入一个文件、循环遍历该文件,然后将其写出到另一个流,这一直困扰着我.网络上到处都是类似的,但仍然略有不同的这类解决方案的实现.

有没有更好的方法保持在Java语言的范围内(意思是不涉及执行特定于操作系统的命令)?也许在某个可靠的开源实用程序包中,这至少会掩盖这个底层实现,并提供一个单线解决方案?

推荐答案

正如工具包上面提到的,Apache Commons IO是最好的 Select ,特别是FileUtils.copyFile();它为您处理所有繁重的任务.

作为后记,请注意FileUtils的最新版本(如2.0.1版本)添加了NIO用于复制文件;NIO can significantly increase file-copying performance,这在很大程度上是因为NIO routine 延迟直接复制到OS/文件系统,而不是通过Java层读写字节来处理它.因此,如果您正在寻找性能,那么可能需要判断您是否使用了最新版本的FileUtils.

Java相关问答推荐

如何在Java中对自定义协议进行主机名验证?

Java在模块化jar文件中找不到类,但是javap可以

CSS应用于一个端点,但不应用于Thymeleaf中的另一个端点

替换com. sun. jndi. dns. DnsContextFactory Wildfly23 JDK 17

缩小画布比例后更改滚动窗格的内部大小

如何调用Firebase Realtime Database中的子图像列表到android studio中的回收器视图?

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

路径映射未发生

对运行在GraalVM-21上的JavaFX应用程序使用分代ZGC会警告不支持JVMCI,为什么?

在Java中,在单个逻辑行中连接列表和单个元素的正确方法是什么?

使用Spring Boot3.2和虚拟线程的并行服务调用

为什么S的文档中说常量方法句柄不能在类的常量池中表示?

在Java中将int[]矩阵添加到ArrayList中,但出现错误

在settings.gradle.kts和Build.gradle.kts中使用公共变量

AbstractList保证溢出到其他方法

STREAMS减少部分结果的问题

何时调用密封层次 struct 的switch 中的默认情况

Java嵌套流查找任意值

Java类型推断:为什么要编译它?

始终使用Spring Boot连接mongodb上的测试数据库