Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同的Files.copy和Files.write这两种方法似乎都做相同的事情,这两种方法都将多部分文件保存到特定位置_Java - Fatal编程技术网

Java 不同的Files.copy和Files.write这两种方法似乎都做相同的事情,这两种方法都将多部分文件保存到特定位置

Java 不同的Files.copy和Files.write这两种方法似乎都做相同的事情,这两种方法都将多部分文件保存到特定位置,java,Java,我正在做一个项目,我试图将一个多部分文件保存到本地磁盘,我尝试了Files.write和Files.copy,这两种方法都完成了我的工作,有人能解释一下这两种方法的区别吗?根据Oracle文档复制方法,将输入流中的所有字节复制到文件中。和write方法将字节写入文件。有人能给出明确的定义吗?谢谢 您不能简单地将代码中的复制替换为写入,对吗?它们不能互换,因为它们采用不同的论点文件。复制读取输入流并将结果写入文件文件。写入将字节数组或字符序列列表的内容写入文件。所以这两种方法做的很相似,但它们的输

我正在做一个项目,我试图将一个多部分文件保存到本地磁盘,我尝试了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;
}