我想使用Groovy脚本将文件从一个位置复制到另一个位置。我发现复制后复制的文件比原始文件大几个数量级。 经过一些试验和错误后,我找到了正确的复制方法,但我仍然感到困惑,为什么它应该更大。
def existingFile = new File("/x/y/x.zip")
def newFile1 = new File("/x/y/y.zip")
def newFile2 = new File("/x/y/z.zip")
new File(newFile1) << new File(existingFile).bytes
new File(newFile2).bytes = new File(existingFile).bytes
如果您运行此代码, newFile1 将远远大于 existingFile ,而 newFile2 将与 existingFile相同。 请注意,之后两个zip文件都有效。
有谁知道为什么会这样?我错误地使用了第一个副本吗?或者在我的设置中它有点奇怪吗?
答案 0 :(得分:1)
如果在调用此代码之前该文件已存在,那么您将从<<
和.bytes = ...
获得不同的行为
file << byteArray
将将<{1}}的内容追加到文件的末尾,而
byteArray
将覆盖具有指定内容的文件。当file.bytes = byteArray
是ZIP数据时,两个版本都会为您提供一个有效的ZIP文件结果,因为ZIP格式可以处理任意数据 pre 挂在文件开头之前实际的ZIP数据没有使文件失效(通常这用于自解压byteArray
存根)。