我正在运行一个来自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个文件根本没有创建。
谢谢,
答案 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."
}
}