使用it.bytes复制后文件大得多

时间:2013-12-13 14:42:35

标签: groovy

我想使用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文件都有效。

有谁知道为什么会这样?我错误地使用了第一个副本吗?或者在我的设置中它有点奇怪吗?

1 个答案:

答案 0 :(得分:1)

如果在调用此代码之前该文件已存在,那么您将从<<.bytes = ...获得不同的行为

file << byteArray

将<{1}}的内容追加到文件的末尾,而

byteArray

覆盖具有指定内容的文件。当file.bytes = byteArray 是ZIP数据时,两个版本都会为您提供一个有效的ZIP文件结果,因为ZIP格式可以处理任意数据 pre 挂在文件开头之前实际的ZIP数据没有使文件失效(通常这用于自解压byteArray存根)。