Question

Y at-il une bibliothèque pour prendre un dossier, prendre un instantané de son contenu, faire quelques modifications puis restaurer à son état précédent de directement à partir d'un programme Java (à savoir pas de la ligne de commande)?

Modifier : En fait, je travaille sur un dossier très important: 80Mo, ~ 7000 fichiers. Et je veux restaurer uniquement les fichiers qui ont été modifiés aussi vite que possible. Seule la copie tout est en arrière du temps.

Était-ce utile?

La solution

L'instantané est essentiellement une copie récursive dans tous les répertoires, et qui semble inévitable. En termes de restauration, supprimez simplement le répertoire et renommer le répertoire temporaire avec le nom d'origine.

Si cela est pour le test fonctionnel, que diriez-vous d'avoir un bon répertoire connu et la copie au début de l'essai? De cette façon, il n'y a pas de prise de cliché. Cela ne fonctionne que, bien sûr, si vous commencez toujours avec un ensemble connu de fichiers.

En ce qui concerne la copie récursive réelle, Apache a un méthode pour que, dans Commons-IO, ainsi que de faire une a récursive supprimer .

Autres conseils

Je ne sais pas d'une bibliothèque non standard pour ce que vous voulez, mais vous pouvez essayer de copier le contenu du répertoire dans un répertoire temporaire et la copie en arrière lorsque vous avez terminé (et supprimer le répertoire temporaire).

Jetez un oeil à java.io .file

Et voici une autre bibliothèque spécifiquement pour copier des fichiers / dossiers.

Pour votre édition: vous devez trouver un moyen de garder une trace ou fichiers « drapeau » qui ont été modifiés. Peut-être étendre la classe de fichier avec une telle propriété « flag »? Vous pouvez garder tous les fichiers dans la mémoire, mais vous auriez à vous soucier de manquer de mémoire si ces répertoires jamais deviennent trop grands.

Ouais! Il y a suffisamment de fonctionnalités API pour le faire!

Voulez-vous prendre un instantané récursif?

J'aime la syntaxe Groovy beaucoup:

currentDir.eachFileRecurse{ file ->
...}

Je prendrais un coup d'œil à la apache commons bibliothèque IO . Je l'ai notamment utilisé le DirectoryWalker qui est vraiment pratique d'inspecter récursive le contenu d'un répertoire.

Pas exactement Java, mais donne moins des maux de tête ...

public void before(String origDir, String tmpDir) {
    try {
      Runtime.getRuntime().exec("cp -pr " + origDir + " " + tmpDir).waitFor();
    } catch (IOException err) {
      ...
    }
}


public void after(String origDir, String tmpDir) {
    try {
      String rndDir = createRandomName();
      Runtime.getRuntime().exec("mv " + origDir + " " + rndDir).waitFor();
      Runtime.getRuntime().exec("mv " + tmpDir + " " + origDir).waitFor();
      Runtime.getRuntime().exec("rm " + rndDir);
    } catch (IOException err) {
      ...
    }
}

Regarder le répertoire (et les sous-répertoires) pour les changements, les accumuler et puis quand vous voulez annuler les modifications, copier uniquement les fichiers modifiés.

Voir par exemple:

http://twit88.com/ blog / 2007/10/02 / develop-un fichier-java watcher /

http://www2.hawaii.edu/~qzhang/FileSystemWatcher/index .html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top