Java – DirectoryToolkit en Java
CodeDevFrançais
Dans la série code à garder sous la main : Une classe pour travailler les fichiers et les répertoires
/** * Copyright (C) 2001 JRA This program is free software; you can redistribute * it and/or modify it under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) any later version. This * program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. You should have received a copy of the GNU General Public * License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass * Ave, Cambridge, MA 02139, USA. */ package com.ledruide.utils.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; /** * Titre : Directory Toolkit Description : DirectoryToolkit permet de travailler rapidement sur les * repertoires.<br> * Deplacement, copie, supression.<br> * La meme chose est possible sur les fichiers. * * @author JRA * @version 1.0 */ public class DirectoryToolkit { /** * Constructeur, ne doit jamais servir donc private ! */ private DirectoryToolkit() {} // ************************************************************************ // ** CREER UN REPERTOIRE ** // ************************************************************************ /** * Permet de creer un repertoire, si ce repertoire existe deja il ne fait rien.<br> * Par contre cette methode cree automatiquement toute l'arborescence du repertoire a creer si * celle-ci n'existe pas. * * @param aCheminComplet du (ou des) repertoire(s) a creer * @throws Exception si une erreur survient */ public static void createDirectory( final String aCheminComplet ) throws Exception { final File lDirectory = new File( aCheminComplet ); if ( !lDirectory.canRead() ) { lDirectory.mkdirs(); } } // ************************************************************************ // ** EFFACER UN REPERTOIRE ** // ************************************************************************ /** * Effacer un repertoire et son contenu. Exemple : <BR> * DirectoryToolkit.deleteDirectory("c:/dev/myProject");<BR> * * @param aCheminComplet du repertoire a effacer * @throws Exception If an error occurs */ public static void deleteDirectory( final String aCheminComplet ) throws Exception { deleteDirectory( new File( aCheminComplet ) ); } /** * Effacer un repertoire et son contenu. Exemple : <BR> * DirectoryToolkit.deleteDirectory(new File("c:/dev/myProject"));<BR> * Cette methode s'apelle recursivement pour suprimer son contenu * * @param aDirectory L'objet File representant un repertoire * @throws Exception If an error occurs */ public static void deleteDirectory( final File aDirectory ) throws Exception { final File[] lFiles = aDirectory.listFiles(); // Récupération de tous les fichiers du // répertoire if ( lFiles != null ) { for ( int i = 0 ; i < lFiles.length ; ++i ) { if ( lFiles[i].isDirectory() ) { // Si le fichier traité est un répertoire deleteDirectory( lFiles[i] ); // j'appelle cette méthode de faéon récursive } else { // Sinon lFiles[i].delete(); // j'efface le fichier } } } aDirectory.delete(); } /** * Effacer seulement le contenu d'un répertoire et optionellement de ses sous-répertoires.<br> * Exemple (dans ce cas, tous les fichiers sont supprimés: <BR> * <code>DirectoryToolkit.deleteDirectoryContent(new File("c:/dev/myProject"), null, true);</code> * <BR> * <br> * Avec un filtre sur "csv" (seul les fichier possédant "csv" dans leur nom seront supprimés) * :<BR> * <code>DirectoryToolkit.deleteDirectoryContent(new File("c:/dev/myProject"), "csv", true);</code> * * @param aDirectory L'objet File représentant un répertoire * @param aFiltre Le filtre pour la suppression des fichiers (null pour tout effacer). * @param aSousRepertoires true efface tout les sous repertoires. * @throws Exception If an error occurs */ public static void deleteDirectoryContent( final File aDirectory , final String aFiltre , final boolean aSousRepertoires ) throws Exception { final File[] lFiles = aDirectory.listFiles(); // Récupération de tous les fichiers du // répertoire if ( lFiles != null ) { for ( int i = 0 ; i < lFiles.length ; ++i ) { // Si le fichier traité est un répertoire // Et que l'on veut supprimer de faéon récursive if ( aSousRepertoires && lFiles[i].isDirectory() ) { // j'appelle cette méthode de faéon récursive deleteDirectoryContent( lFiles[i] , aFiltre , aSousRepertoires ); } else { // Vérification du filtre if ( aFiltre == null ) { // j'efface le fichier lFiles[i].delete(); } else { // Si le filtre existe // et que le fichier correspond au critere, on le supprime if ( lFiles[i].getName().indexOf( aFiltre ) != -1 ) { lFiles[i].delete(); } } } } } } /** * @see DirectoryToolkit#deleteDirectoryContent(File aDirectory, String aFiltre, boolean * aSousRepertoires) * @param aCheminComplet du (ou des) répertoire(s) é effacer * @param aFiltre Le filtre pour la suppression des fichiers (null pour tout éffacer). * @param aSousRepertoires true efface tout les sous repertoires. * @throws Exception si une erreur survient */ public static void deleteDirectoryContent( final String aCheminComplet , final String aFiltre , final boolean aSousRepertoires ) throws Exception { deleteDirectoryContent( new File( aCheminComplet ) , aFiltre , aSousRepertoires ); } // ************************************************************************ // ** DEPLACER UN REPERTOIRE ** // ************************************************************************ /** * Déplacer un répertoire entier et ses sous-répertoire, exemple :<BR> * DirectoryToolkit.moveDirectory("c:/dev/", "c:/LOCAL/amoi/", "testsJava");<BR> * * @param aCheminActuel * @param aCheminDestination * @param aRepertoire * @throws Exception If an error occurs */ public static void moveDirectory( final String aCheminActuel , final String aCheminDestination , final String aRepertoire ) throws Exception { // Reviens é copier, puis effacer copyDirectory( aCheminActuel , aCheminDestination , aRepertoire ); deleteDirectory( aCheminActuel + aRepertoire ); } // ************************************************************************ // ** COPIER UN REPERTOIRE ** // ************************************************************************ /** * Copier un répertoire entier sans effacer le contenu de l'original, exemple :<BR> * DirectoryToolkit.copyDirectory("c:/dev/", "c:/LOCAL/amoi/", "testsJava");<BR> * * @param aCheminActuel * @param aCheminDestination * @param aRepertoire * @throws Exception If an error occurs */ public static void copyDirectory( final String aCheminActuel , final String aCheminDestination , final String aRepertoire ) throws Exception { // OK copie de répertoire copyDirectory( new File( aCheminActuel + aRepertoire ) , new File( aCheminDestination + aRepertoire ) ); } /** * Copier un répertoire entier sans effacer le contenu de l'original, exemple :<BR> * DirectoryToolkit.copyDirectory("c:/dev/", "c:/LOCAL/amoi/", "testsJava");<BR> * * @param aRepertoireActuel * @param aCheminDestination * @throws Exception Si une erreur survient */ public static void copyDirectory( final File aRepertoireActuel , final File aCheminDestination ) throws Exception { final File[] lFiles = aRepertoireActuel.listFiles(); // Récupération de tous les fichiers // du répertoire File lFile; File lTemp; final String lSEPARATOR = System.getProperty( "lFile.separator" ); if ( lFiles != null ) { for ( int i = 0 ; i < lFiles.length ; ++i ) { lFile = lFiles[i]; System.out.println( new StringBuffer().append( "lFile.getName = " ).append( lFile.getName() ) .toString() ); System.out.println( new StringBuffer().append( "lFile.getParent = " ).append( lFile.getParent() ) .toString() ); if ( lFile.isDirectory() ) { // Si le fichier traité est un répertoire // Comme le répertoire de destination n'existe pas, je le crée lTemp = new File( new StringBuffer().append( aCheminDestination ).append( lSEPARATOR ).append( lFile.getName() ).toString() ); lTemp.mkdirs(); copyDirectory( lFile , lTemp ); // j'appelle cette méthode de faéon récursive } else { // Sinon je copie le fichier // Si le répertoire de destination n'existe pas, je le crée if ( !aCheminDestination.exists() ) { createDirectory( aCheminDestination.getAbsolutePath() ); } // Comme le fichier de destination n'existe pas, je le crée lTemp = new File( new StringBuffer().append( aCheminDestination.getAbsolutePath() ).append( lSEPARATOR ).append( lFile.getName() ).toString() ); copyFile( lFile.getAbsolutePath() , lTemp.getAbsolutePath() ); } } } // copyFile(actualDirectory.getAbsolutePath(), destinationDirectory + lSEPARATOR + // actualDirectory.getName()); } private static void copyFile( final String aSourceFile , final String aTargetFile ) throws Exception { final File lInputFile = new File( aSourceFile ); final File lOutputFile = new File( aTargetFile ); final FileInputStream lIn = new FileInputStream( lInputFile ); final FileOutputStream lOut = new FileOutputStream( lOutputFile ); int c; while ( ( c = lIn.read() ) != -1 ) lOut.write( c ); lIn.close(); lOut.close(); } // ************************************************************************ // ** RENOMER UN REPERTOIRE ** // ************************************************************************ /** * Renomer un répertoire. Exemple :<BR> * DirectoryToolkit.renameDirectory("c:/dev/", "projectToto", "TotoProject");<BR> * * @param aChemin * @param aNomActuel * @param aNouveauNom * @throws Exception If an error occurs */ public static void renameDirectory( final String aChemin , final String aNomActuel , final String aNouveauNom ) throws Exception { // OK ICI L'IMPLEMENTATION DOIT ETRE final File lActual = new File( aChemin + aNomActuel ); lActual.renameTo( new java.io.File( aChemin + aNouveauNom ) ); } }