如果文件不存在,则生成前置条件

时间:2014-07-14 10:25:19

标签: acceleo

我想在生成之前测试文件是否不存在。

是否可以使用像isFileExist这样的东西?

[template public generate(conf : Configuration) ? (isFileExist('/path/to/file.txt'))]
[file ('/path/to/file.txt', false, 'UTF-8')]
file content
[/file]
[/template]

提前致谢。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我终于通过在外部Java类中“外化”此函数来实现它。这样,您可以定义一个方法,例如:

public boolean existsFile(String filepath) {
    Path p = Paths.get(filepath);
    p.normalize();
    File f = new File(filepath);
    return f.exists();
}

然后通过定义如下的查询从Acceleo中调用它:

[query public existsFile(filePath : String): 
    Boolean = invoke('utils.AcceleoUtils', 'existsFile(java.lang.String)', Sequence{filePath})
/]

这样,在您的示例中,您可以执行

[template public generate(conf : Configuration)]
    [if existsFile('/path/to/file.txt')/]
        [file ('/path/to/file.txt', false, 'UTF-8')]
            file content
        [/file]
    [/if]

[/template]

pd:小心路径,因为'file'标签默认输出目标路径中的文件,所以万一你不提供绝对路径,你需要在调用时或在existsFile函数。