TITLE:Backup Fileを番号付きで作成

Backup Fileを番号付きで作成

編集者:Terai Atsuhiro~

作成日:2003-10-07
更新日:2021-12-14 (火) 18:52:02
  • category: swing folder: BackupFile title: Backup Fileを番号付きで作成 tags: [File] author: aterai pubdate: 2003-11-03T02:48:53+09:00 description: 拡張子に番号を付けたバックアップファイルを作成します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTH9enrSII/AAAAAAAAASA/du4XRgNsIZs/s800/BackupFile.png

概要

拡張子に番号を付けたバックアップファイルを作成します。

概要

xyzzy風の番号付きバックアップファイルを作成します。

サンプルコード

#spanend
#spanadd
private File makeBackupFile(File file, int intold, int intnew) {
#spanend
  File testFile = null;
  String newfilename = file.getAbsolutePath();
  if (intold == 0 && intnew == 0) {
    file.delete();
    return new File(newfilename);
  }
  boolean testFileFlag = false;
  for (int i = 1; i <= intold; i++) {
    testFile = new File(file.getParentFile(), file.getName() + "." + i + "~");
    if (!testFile.exists()) {
      testFileFlag = true;
      break;
    }
  }
  if (!testFileFlag) {
    for (int i = intold + 1; i <= intold + intnew; i++) {
      testFile = new File(file.getParentFile(), file.getName() + "." + i + "~");
      if (!testFile.exists()) {
        testFileFlag = true;
        break;
      }
    }
  }
  if (testFileFlag) {
    System.out.println("createBKUP1" + testFile.getAbsolutePath());
    file.renameTo(testFile);
  } else {
    File tmpFile3 = new File(file.getParentFile(),
                             file.getName() + "." + (intold + 1) + "~");
    tmpFile3.delete();
    for (int i = intold + 2; i <= intold + intnew; i++) {
      File tmpFile1 = new File(file.getParentFile(),
                               file.getName() + "." + i + "~");
      File tmpFile2 = new File(file.getParentFile(),
                               file.getName() + "." + (i - 1) + "~");
      tmpFile1.renameTo(tmpFile2);
    }
    File tmpFile = new File(file.getParentFile(),
                            file.getName() + "." + (intold + intnew) + "~");
    System.out.println("changeBKUP2" + tmpFile.getAbsolutePath());
    file.renameTo(tmpFile);
  }
  // System.out.println(newfilename);
  return new File(newfilename);
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlin

#screenshot

解説

上記のサンプルでは、xyzzy風の番号付きバックアップファイル作成のテストを行っています。

サンプルコード

private File makeBackupFile(File file, int intold, int intnew) {
  File testFile = null;
  String newfilename = file.getAbsolutePath();
  if(intold==0 && intnew==0) {
    file.delete();
    return new File(newfilename);
  }
  boolean testFileFlag = false;
  for(int i=1;i<=intold;i++) {
    testFile = new File(file.getParentFile(), file.getName()+"."+i+"~");
    if(!testFile.exists()) {
      testFileFlag = true;
      break;
    }
  }
  if(!testFileFlag) {
    for(int i=intold+1;i<=intold+intnew;i++) {
      testFile = new File(file.getParentFile(), file.getName()+"."+i+"~");
      if(!testFile.exists()) {
        testFileFlag = true;
        break;
      }
    }
  }
  if(testFileFlag) {
    Logger.global.info("createBKUP1"+testFile.getAbsolutePath());
    file.renameTo(testFile);
  }else{
    File tmpFile3 = new File(file.getParentFile(),
                             file.getName()+"."+(intold+1)+"~");
    tmpFile3.delete();
    for(int i=intold+2;i<=intold+intnew;i++) {
      File tmpFile1 = new File(file.getParentFile(),
                               file.getName()+"."+i+"~");
      File tmpFile2 = new File(file.getParentFile(),
                               file.getName()+"."+(i-1)+"~");
      tmpFile1.renameTo(tmpFile2);
    }
    File tmpFile = new File(file.getParentFile(),
                            file.getName()+"."+(intold+intnew)+"~");
    Logger.global.info("changeBKUP2"+tmpFile.getAbsolutePath());
    file.renameTo(tmpFile);
  }
  //Logger.global.info(newfilename);
  return new File(newfilename);
}
  • 以下の例では古いバージョンを2つ、新しいバージョンを3つバックアップとして残す
    • tmp.foo.1~からtmp.foo.5~が残る
    • tmp.foo.1~がもっとも古いバージョンのファイルになる
  • &jar;
  • &zip;
  • バックアップファイルが5個以上になった場合、古い方のバージョン2つはそのまま残して新しいバージョンをずらしたバックアップが更新される
    • tmp.foo.1~, tmp.foo.2~は残る
    • tmp.foo.3~は削除
    • tmp.foo.4~tmp.foo.3~にリネーム
    • tmp.foo.5~tmp.foo.4~にリネーム
    • tmp.foo.5~が新にバックアップとして生成

解説

上記のサンプルでは、xyzzy風の番号付きバックアップのテストを行っています。
#spanend
#spanadd
File tmpFile = File.createTempFile("tmp", ".foo~", file.getParentFile());
#spanend
#spanadd
File file = makeBackupFile(file, 2, 3);
#spanend
#spanadd
tmpFile.renameTo(file);
#spanend
#spanadd
以下の例では、古いバージョンを2つ、新しいバージョンを3つバックアップとして残します。
  • tmp.foo.1~ から tmp.foo.5~ が残される
  • tmp.foo.1~ がもっとも古いバージョンのファイルになる

参考リンク

バックアップファイルが5個以上になった場合、古い方のバージョン2つはそのまま残し、新しいバージョンをずらしてバックアップが更新されます。
  • tmp.foo.1~, tmp.foo.2~ は残される
  • tmp.foo.3~は削除される
  • tmp.foo.4~ はtmp.foo.3~にリネーム
  • tmp.foo.5~ はtmp.foo.4~にリネーム
  • tmp.foo.5~ が新にバックアップとして生成される
File tmpFile = File.createTempFile("tmp", ".foo~", file.getParentFile());
File file = makeBackupFile(file, 2, 3);
tmpFile.renameTo(file);

コメント

コメント