Java 不同的Files.copy和Files.write这两种方法似乎都做相同的事情,这两种方法都将多部分文件保存到特定位置
我正在做一个项目,我试图将一个多部分文件保存到本地磁盘,我尝试了Files.write和Files.copy,这两种方法都完成了我的工作,有人能解释一下这两种方法的区别吗?根据Oracle文档复制方法,将输入流中的所有字节复制到文件中。和write方法将字节写入文件。有人能给出明确的定义吗?谢谢Java 不同的Files.copy和Files.write这两种方法似乎都做相同的事情,这两种方法都将多部分文件保存到特定位置,java,Java,我正在做一个项目,我试图将一个多部分文件保存到本地磁盘,我尝试了Files.write和Files.copy,这两种方法都完成了我的工作,有人能解释一下这两种方法的区别吗?根据Oracle文档复制方法,将输入流中的所有字节复制到文件中。和write方法将字节写入文件。有人能给出明确的定义吗?谢谢 您不能简单地将代码中的复制替换为写入,对吗?它们不能互换,因为它们采用不同的论点文件。复制读取输入流并将结果写入文件文件。写入将字节数组或字符序列列表的内容写入文件。所以这两种方法做的很相似,但它们的输
您不能简单地将代码中的
复制
替换为写入
,对吗?它们不能互换,因为它们采用不同的论点<代码>文件。复制读取输入流
并将结果写入文件<代码>文件。写入将字节数组或字符序列列表的内容写入文件。所以这两种方法做的很相似,但它们的输入方式不同。虽然InputStream
可以从内存缓冲区中提取,但我认为write
总是在写入内存中已经存在的内容,而copy
通常是从外部源读取字节(另一个文件或来自网络的内容)然后将它们写入文件。正如您所说,Files.copy()
将输入流
或路径
作为字节写入的源,而Files.write()
希望字节写入字节数组
对于copy()
来说,第一个参数是源,第二个参数表示目标,而对于write()
则相反,这有点尴尬
基本上,您可以说Files.copy(路径源,路径目标)
实现为
public static long copy( Path source, Path target )
{
var bytes = Files.readAllBytes( source );
Files.write( target, bytes );
return bytes.size;
}
或
(为了简洁起见,省略了错误处理!实际实现也可能有所不同!)
从结果来看,两种实现是等效的,但第二种实现需要额外的InputStream
作为字节数组的包装器
通常,如果输入数据(尚未)完全保存在内存中,则可以说您使用了
Files.copy()
,否则使用Files.write()
。使用像ByteInputStream
这样的类,您可以将数据隐藏在内存中。方法copy()
复制整个文件或流。write()
方法写入字节或行。所有这些都在Javadoc中进行了说明。它们都与多部分无关。不清楚你到底在问什么谢谢你谢谢tquadrat
public static long copy( Path source, Path target )
{
var bytes = Files.readAllBytes( source );
Files.copy( new ByteInputStream( bytes ), target );
return bytes.size;
}