gpt4 book ai didi

java - 用Java复制文件的标准简洁方法?

转载 作者:bug小助手 更新时间:2023-10-28 01:35:56 27 4
gpt4 key购买 nike

一直困扰着我的是,在 Java 中复制文件的唯一方法是打开流、声明缓冲区、读入一个文件、循环通过它,然后将其写入另一个流。网络上充斥着类似但仍然略有不同的此类解决方案的实现。

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

最佳答案

我会避免使用像 apache commons 这样的大型 api。这是一个简单的操作,它内置在新 NIO 包中的 JDK 中。在之前的答案中已经链接到它,但是 NIO api 中的关键方法是新函数“transferTo”和“transferFrom”。

http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html#transferTo(long,%20long,%20java.nio.channels.WritableByteChannel)

其中一篇链接文章展示了如何使用 transferFrom 将此函数集成到代码中的好方法:

public static void copyFile(File sourceFile, File destFile) throws IOException {
if(!destFile.exists()) {
destFile.createNewFile();
}

FileChannel source = null;
FileChannel destination = null;

try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
}
finally {
if(source != null) {
source.close();
}
if(destination != null) {
destination.close();
}
}
}

学习 NIO 可能有点棘手,因此您可能只想相信这个机制,然后再开始尝试一夜之间学习 NIO。从个人经验来看,如果您没有经验并且通过 java.io 流被介绍给 IO,那么学习可能会非常困难。

关于java - 用Java复制文件的标准简洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/106770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com