[JAVA] Je souhaite sauvegarder facilement les fichiers utilisés au travail

Problèmes dans l'entreprise

Au travail, je garde souvent une sauvegarde de mes documents. La principale raison est la gestion des versions des fichiers.

La méthode consiste à copier le fichier sur l'Explorateur et à entrer la date et l'heure dans le nom du fichier afin que vous puissiez voir la date et l'heure de modification de chaque fichier avant de modifier la dernière version. Cela ressemble à ceci (↓). pic-20190705T1416.png

Il existe de nombreux services dans le monde qui peuvent gérer facilement les versions de fichiers, tels que Box, et je pense que de nombreuses personnes les utilisent. Cependant, cette méthode présente également des avantages.

D'autre part, le ** point gênant ** de cette méthode de gestion est que la procédure est compliquée comme suit.

  1. Copiez et collez "Proposal.docx" ([Ctrl] + [C][Ctrl] + [V])
  2. Créez un fichier nommé "Proposal-Copy.docx".
  3. Modifiez la partie "--copy" du nom de fichier en date et heure. C'est gênant car vous entrez en vérifiant la date de modification du fichier.

Cela ne me dérange pas une seule fois, mais comme je le répète tous les jours et plusieurs fois, cela devient assez ennuyeux. De plus, si je fais une erreur dans la date en raison d'une faute de frappe, l'ordre de mise à jour sera interrompu lors de l'organisation par nom de fichier.

J'ai créé un outil pour pouvoir le sauvegarder en un instant

J'ai donc décidé de créer un outil et de le rendre plus facile. La condition est que le fichier nommé "-latest" juste avant l'extension de fichier, tel que "Proposition -latest.docx".

Si vous faites glisser et déposez le fichier sur l'outil sur l'Explorateur, il sera automatiquement sauvegardé et le nom du fichier sera mis à jour. Un fichier batch appelé backup.bat est un outil, et il vous suffit de glisser-déposer le fichier cible dans le fichier batch.

Dans le fichier de commandes, les programmes Java sont en cours d'exécution. pic-20190705T1556.png

La figure ci-dessous montre le résultat de l'exécution. C'est pratique car vous pouvez effectuer une sauvegarde en un seul clic. pic-20190705T1435.png

Code source

Le code source ressemble à ceci. Il fonctionne avec une combinaison de Java et de fichiers batch. Compilez votre programme Java et placez les fichiers de classe et de lot dans le même dossier.

Au moment de l'exécution, faites glisser et déposez le fichier que vous souhaitez sauvegarder dans le fichier de commandes sur l'Explorateur, comme illustré dans la figure ci-dessus. Effectuez une sauvegarde dans le même dossier que le fichier cible.

De plus, dans mon cas, je crée un raccourci pour l'outil (fichier batch) sur le bureau et le glisse et le dépose sur le raccourci.

CopyAndBackupFile.java


import java.net.*;
import java.nio.file.*;
import java.text.*;
import java.util.*;

public class CopyAndBackupFile {
  private static final String DEFAULT_PLACE_HOLDER = "latest";
  private static final SimpleDateFormat FORMAT_PREFIX = new SimpleDateFormat("YYYYMMdd");
  private static final SimpleDateFormat FORMAT_SUFFIX = new SimpleDateFormat("HHmm");

  public static void main(String[] args) throws Exception {
    int argc = 0;
    String placeHolder;
    
    if (args[argc].equals("-p")) {
      placeHolder = args[++argc];
      ++argc;
    } else {
      placeHolder = DEFAULT_PLACE_HOLDER;
    }

    assert placeHolder != null : "Placeholder is null";

    Path[] paths = new Path[args.length - argc];
    for (int i = 0; i < paths.length; i++, argc++) {
      paths[i] = Paths.get(args[argc]);
    }

  rename_loop:
    for (int i = 0; i < paths.length; i++) {
      Path pathOrg = Paths.get(paths[i].toString());
      Path dir = pathOrg.getParent();
      Path file = pathOrg.getFileName();

      String sFile = file.toString();
      
      int phStart = sFile.lastIndexOf(placeHolder);
      if (phStart < 0) {
        System.err.printf("ERROR: %s does not include \"%s\"%n", sFile, placeHolder);
        continue rename_loop;
      }
      int phEnd = phStart + placeHolder.length();
      
      long lastModified = pathOrg.toFile().lastModified();
      Date date = new Date(lastModified);
      
      String backupDate = FORMAT_PREFIX.format(date)
                                       .concat("T")
                                       .concat(FORMAT_SUFFIX.format(date));
      

      String sFileNew = sFile.substring(0, phStart)
                             .concat(backupDate)
                             .concat(sFile.substring(phEnd));
      
      Path pathNew = Paths.get(dir.toString(), sFileNew);
      
      System.out.printf("%s -> %s%n", pathOrg, pathNew);
      Files.copy(pathOrg, pathNew);
    }
  }
}

backup.bat


@echo off
setlocal

rem
rem The top directory of the tool
rem
set __tools_dir=%~d0%~p0
set __last_char=%__tools_dir:~-1%
if "%__last_char%"=="\" set __tools_dir=%__tools_dir:~0,-1%


rem
rem Environment variables
rem
set __java_bin_dir=C:\ProgramData\Oracle\Java\javapath
set __classpath=%__tools_dir%

if "%JAVA_HOME%"=="" (
  echo WARNING: JAVA_HOME is empty. Using %__java_bin_dir%
) else ( 
  set __java_bin_dir=%JAVA_HOME:"=%\bin
)

if not exist "%__java_bin_dir%\java.exe" (
  echo ERROR: %__java_bin_dir%\java.exe does not exist
  echo ERROR: set JAVA_HOME to the top directory of Java SE 7 or later
  goto :EOF
)

set __java_options=


rem 
rem Run
rem
@echo on
"%__java_bin_dir%\java.exe" %__java_options% -classpath "%__classpath%" CopyAndBackupFile %*
@echo off

@endlocal

Correction d'article (14 juillet 2019)

Il y avait une description incorrecte que "Box" est un "service Microsoft", donc je l'ai corrigée. Nous nous excusons pour la correction.

Recommended Posts

Je souhaite sauvegarder facilement les fichiers utilisés au travail
Une collection de liens que vous souhaitez aider lorsque JSF ne fonctionne pas du tout
Je souhaite supprimer un fichier géré par Git
Je veux convertir des caractères ...
Je souhaite rechercher de manière récursive des fichiers dans un répertoire spécifique
Je veux éviter OutOfMemory lors de la sortie de gros fichiers avec POI
Je veux écrire une JSP dans Emacs plus facilement que la valeur par défaut.
Je souhaite développer une application web!
J'ai essayé de résumer les méthodes utilisées
Je veux écrire un joli build.gradle
Je souhaite éliminer les messages d'erreur en double
Je veux créer une application ios.android
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux écrire un test unitaire!
Je souhaite installer PHP 7.2 sur Ubuntu 20.04.
Je veux arrêter complètement les mises à jour Java
Je veux utiliser @Autowired dans Servlet
Je souhaite cibler les champs statiques sur @Autowired
Je veux faire du développement d'équipe à distance
[Android] Je souhaite créer un ViewPager pouvant être utilisé pour les didacticiels