2

以下のメソッドには、ファイルを「作業」ディレクトリから「移動」ディレクトリに移動する機能があり、メソッド呼び出しを通じてパスを受け取ります。すべて機能しますが、ファイル名に .renameTo メソッドが false を返す 2 つの拡張子 (.xml.md5 など) を持つ名前がある場合です。以下のコードを変更して、実行されている OS に関係なく動作するようにする方法はありますか。(現在は Windows です)

public void moveToDir(String workDir, String moveDir) throws Exception {
    File tempFile = new File(workDir);
    File[] filesInWorkingDir = tempFile.listFiles();
    for (File file : filesInWorkingDir) {
        System.out.println(file.getName());
        if (new File(moveDir + File.separator + file.getName()).exists()) 
            new File(moveDir + File.separator + file.getName()).delete();
        System.out.println(moveDir + File.separator + file.getName());
        Boolean renameSuccessful = file.renameTo(new File(moveDir + File.separator + file.getName()));
        if (!renameSuccessful) throw new Exception("Can't move file to " + moveDir +": " + file.getPath());
    }
}
4

1 に答える 1

2

コードを簡素化し、削除が成功したかどうかのチェックを追加しました。それを試してみてください。

public void moveToDir(String workDir, String moveDir) {
  for (File file : new File(workDir).listFiles()) {
      System.out.println(file.getName());
      final File toFile = new File(moveDir, file.getName());
      if (toFile.exists() && !toFile.delete())
        throw new RuntimeException("Cannot delete " + toFile);
      System.out.println(toFile);
      if (!file.renameTo(toFile))
        throw new RuntimeException(
          "Can't move file to " + moveDir +": " + file.getPath());
  }
}
于 2012-04-20T13:01:39.890 に答える