即使使用java中的存在检查也会创建Outfiles

时间:2016-04-05 22:04:01

标签: java path filepath

我目前正在用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();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您没有检查文件是否以“FL_”或“SR_”开头。第一次运行时,foo.bar会重命名为FL_foo.bar。第二次运行时,foo.bar不会重命名,但已经存在的FL_foo.bar会重命名为FL_FL_foo.bar。您需要根据需要查看文件名是否以“FL_”或“SR_”开头。