我目前正在用Java创建一个包,其中一个类包含一个创建和写入outfiles的方法。
我的目标是检查方法以查看是否已创建outfile。如果没有,请创建它。如果它有,什么都不做。通过创建outfile,我想简单地将我在条件中指定的sourceType变量添加为实际文件名的前缀(而不是整个路径)。
我的问题在于最后一句,因为尽管我的检查,仍然会创建文件。如果我运行一次,我从“/ path / to / myFile”获得“/ path / to / FL_myFile”。如果我运行它两次,它会创建另一个名为“/ path / to / FL_FL_myFile”,这是错误的。
我已经停止编程一段时间而且我的大脑已经很累了所以请原谅我,如果这是一个愚蠢的错误......
非常感谢!
这是我的代码:
dependency injection
感谢Paul Ostrowski的回答。正如所料,很明显我没有看到它。在下面添加了一个简单的修复程序。
public static void RenameFiles(File subDir) {
File[] files = subDir.listFiles();
Path source = FileSystems.getDefault().getPath(subDir.toString());
String sourceType = null;
if (source.toString().endsWith("Flavonoid")) {
sourceType = "/FL_";
} else {
sourceType = "/SR_";
}
for (File file : files) {
Path oldFilePath = FileSystems.getDefault().getPath(file.toString());
Path newFilePath = FileSystems.getDefault().getPath(subDir.toString() + sourceType + file.getName());
File newFile = newFilePath.toFile();
if(newFile.exists()) {
System.out.println("Exists!!! Do nothing! : " + newFile.toString());
continue;
} else {
System.out.println("Does not exist!! Make it!! " + newFile.toString());
try {
Files.move(oldFilePath, newFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
您没有检查文件是否以“FL_”或“SR_”开头。第一次运行时,foo.bar会重命名为FL_foo.bar。第二次运行时,foo.bar不会重命名,但已经存在的FL_foo.bar会重命名为FL_FL_foo.bar。您需要根据需要查看文件名是否以“FL_”或“SR_”开头。