一直困扰着我的是,在 Java 中复制文件的唯一方法是打开流、声明缓冲区、读入一个文件、循环通过它,然后将其写入另一个流。网络上充斥着类似但仍然略有不同的此类解决方案的实现。
有没有更好的方法可以保持在 Java 语言的范围内(意味着不涉及执行操作系统特定的命令)?也许在一些可靠的开源实用程序包中,这至少会掩盖这个底层实现并提供一个单一的解决方案?
正如上面提到的工具包,Apache Commons IO 是要走的路,特别是FileUtils。复制文件();它为您处理所有繁重的工作。
作为后记,请注意最近的 FileUtils 版本(例如 2.0.1 版本)添加了使用 NIO 来复制文件;NIO 可以显着提高文件复制性能,这在很大程度上是因为 NIO 例程将复制直接推迟到 OS/文件系统,而不是通过 Java 层读取和写入字节来处理它。因此,如果您正在寻找性能,可能值得检查您使用的是最新版本的 FileUtils。