如何创建新文件名而不是覆盖Groovy中的文件

时间:2015-01-16 03:52:45

标签: file groovy

我将文件移动到文件夹。有没有办法不覆盖具有该名称的文件?

例如,folder包含名为file1.pdf的文件。如何将另一个名为file1.pdf的文件移动到该文件夹​​中,以便将名称更改为例如file1-1.pdffile1-2.pdf以防止原始文件被覆盖。

我使用子字符串来做到这一点,但它的代码非常冗长而且非常糟糕。

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

def save = { File dir, String name ->
    int version = 1
    def splitName = name.split(/\./, 0).with { it -> it.length == 1 ? [it[0], ''] : [it[0..-2].join('.'), ".${it[-1]}"] }
    def rename = { String prefix, String ext -> "$prefix-$version$ext" }

    while (new File(dir, name).exists()) {
        name = rename(*splitName)
        version++
    }
    println "Save the file as $name"
}

save(new File('/tmp'), 'file.txt')

假设您已经有文件/tmp/file.txt和文件/tmp/file-1.txt,请打印出来:Save the file as file-2.txt