Groovy - 创建文件问题:文件名,目录名或卷标语法不正确

时间:2010-10-28 15:37:13

标签: file groovy soapui

我正在运行一个来自Soap UI的Groovy脚本,脚本需要生成大量文件。 这些文件在名称中也有一个列表中的两个数字(该列表中的所有组合都不同),并且有1303种组合 可用,脚本只生成1235个文件。

代码的一部分是:

filename = groovyUtils.projectPath + "\\" + "$file"+"_OK.txt";
targetFile = new File(filename);
targetFile.createNewFile();

其中$ file实际上是文件名的那部分,包括该列表中的那两个组合:

file = "abc" + "-$firstNumer"+"_$secondNumber"

对于那些未创建的文件,会返回一条消息:“文件名,目录名称或卷标语法不正确”。

我尝试过另一条道路:

filename = "D:\\rez\\" + "\\" + "$file"+"_OK.txt";
targetFile = new File(filename);
targetFile.createNewFile(); 

还有:

File parentFolder = new File("D:\\rez\\");
File targetFile = new File(parentFolder, "$file"+"_OK.txt");
targetFile.createNewFile();

(我在这里找到:What are possible reasons for java.io.IOException: "The filename, directory name, or volume label syntax is incorrect") 但没有任何效果。

我不知道问题出在哪里。奇怪的是,1235个文件创建正常,其余的68个文件根本没有创建。

谢谢,

2 个答案:

答案 0 :(得分:1)

我的猜测是,某些文件的路径中包含非法字符。究竟哪些字符是非法的是平台特定的,例如在Windows上他们是

  

\ /:*? “<> |

为什么不在调用targetFile.createNewFile();之前记录文件的完整路径,并记录此方法是否成功,例如

filename = groovyUtils.projectPath + "\\" + "$file"+"_OK.txt";
targetFile = new File(filename);
println "attempting to create file: $targetFile"

if (targetFile.createNewFile()) {
    println "Successfully created file $targetFile"
} else {
    println "Failed to create file $targetFile"
}

完成此过程后,请检查日志,我怀疑您会在“”无法创建文件....“消息中看到常见模式

答案 1 :(得分:1)

当具有该名称的文件或目录已存在时,

File.createNewFile()将返回false。在所有其他故障情况下(安全性,I / O),它会抛出异常。

评估createNewFile()的返回值,或者使用File.exists()方法:

File file = new File("foo")
// works the first time
createNewFile(file)
// prints an error message
createNewFile(file)

void createNewFile(File file) {
    if (!file.createNewFile()) {
        assert file.exists()
        println file.getPath() + " already exists."
    }
}