IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Copier un fichier en java en gardant date


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Par défaut Copier un fichier en java en gardant date
    Bonjour,

    Je voudrai pouvoir copier simplement un fichier d'un répertoire vers un autre, sans changer la date de création du fichier.

    J'utilise la fonction suivante :

    Mais je trouve ça très compliqué pour une simple copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    	static void copier_fichier( String fichier_ori, String fichier_dest ) {
    		try {
    			BufferedReader entree = new BufferedReader(new FileReader(fichier_ori));
    			BufferedWriter sortie = new BufferedWriter(new FileWriter(fichier_dest));
    			String str;
    			while ((str=entree.readLine()) != null) {
    				sortie.write(str + "\n");
    			}
    			entree.close();
    			sortie.close();
    		}
    		catch(Exception exception) {
    			exception.printStackTrace();
            }
    	}
    Merci pour l'aide

  2. #2
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Difficile de faire plus simple cela dit, à part en utilisant une API genre CommonsIO et FileUtils.copyFile(File src, File dest)

    Deux tites remarques cependant si tu choisis de garder ta méthode:
    - Les close() dans le bloc try c'est pas tiptop. On préfère fermer les flux dans un finally.
    - "\n" devrait être remplacé par System.getProperty("line.separator") afin que ça marche sur tous les OS

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Heimdal Voir le message
    - Les close() dans le bloc try c'est pas tiptop. On préfère fermer les flux dans un finally.
    Citation Envoyé par Heimdal Voir le message
    - "\n" devrait être remplacé par System.getProperty("line.separator") afin que ça marche sur tous les OS
    Heu...
    Pourquoi présupposer que le fichier contient des caractères !?
    En effet cela pose plusieurs problèmes
    Je dirais plutôt qu'il serait préférable de ne pas supposer qu'on manipules du texte : un fichier ne contient pas forcément du texte et dans ce cas on va corrompre le fichier avec l'insertion d'un "\n" ou même d'un System.getProperty("line.separator")... sans compter les dégat que peuvent provoquer l'encodage/désencodage des caractères ...


    Bref il est préférable de manipuler simplement des bytes, de préférence avec une lecture/écriture par bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	public static void copy(File source, File dest) throws IOException {
    		FileInputStream in = new FileInputStream(source);
    		try {
    			FileOutputStream out = new FileOutputStream(dest);
    			try {
    				byte[] buf = new byte[8192];
    				int len;
    				while ( (len=in.read(buf)) >= 0 ) {
    					out.write(buf, 0, len);
    				}
    			} finally {
    				out.close();
    			}
    		} finally {
    			in.close();
    		}
    	}
    On peut également utiliser les FileChannel qui peuvent apporter de meilleurs résultats sur de gros fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	public static void copy(File source, File dest) throws IOException {
    		FileChannel in = new FileInputStream(source).getChannel();
    		try {
    			FileChannel out = new FileOutputStream(dest).getChannel();
    			try {
    				long pos = 0;
    				do {
    					long toWrite = in.size() - pos;
    					pos += in.transferTo(pos, toWrite, out);
    				} while ( pos<in.size() );
    			} finally {
    				out.close();
    			}
    		} finally {
    			in.close();
    		}
    	}

    a++

  4. #4
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Pourquoi présupposer que le fichier contient des caractères !?
    T'as tout à fait raison, j'ai été trop rapide et trop superficiel dans ma réponse.

    En tout cas, merci pour ton exemple d'utilisation des FileChannel, je ne connaissais pas du tout.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Par défaut
    Merci pour vos réponses

    Par contre le fait d'utiliser ces méthodes va changer la date du fichier ?

    Si oui y a t il un moyen d'éviter ça


    Merci

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    La date est généré automatiquement par le système d'exploitation.

    Tu peux la modifier via setLastModified()...

    a++

Discussions similaires

  1. Copier des fichiers avec une contrainte de date
    Par jejeapollo dans le forum VBScript
    Réponses: 1
    Dernier message: 02/07/2009, 09h43
  2. copier xx fichier d'apres leurs date de modification
    Par patou41000 dans le forum VBScript
    Réponses: 3
    Dernier message: 11/05/2009, 12h36
  3. Copier un fichier à une date donnée
    Par skeut dans le forum Administration système
    Réponses: 2
    Dernier message: 06/05/2008, 12h11
  4. Copier et coller un fichier avec java
    Par opensource dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 13/03/2008, 17h53
  5. Copier les fichiers d'un répertoire dont la date est supérieure à x
    Par tatayoyo dans le forum Shell et commandes GNU
    Réponses: 17
    Dernier message: 03/10/2006, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo