Copier des fichiers

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 742 fois - Téléchargée 25 fois

Contenu du snippet

Cette classe permet de copier des fichiers. De plus on peut définir des objets de ce type qui permettrons les mêmes manipulation que sur un fichier normal(File).

Source / Exemple :


import java.io.*;
import java.net.*;

public class CopieFile extends File {

	public CopieFile(String pathname) {
		super(pathname);
	}

	public CopieFile(String parent, String child) {
		super(parent, child);
	}

	public CopieFile(File parent, String child) {
		super(parent, child);
	}

	public CopieFile(URI uri) {
		super(uri);
	}
	
	/**

  • Cette méthode fait une copie par lot de la taille spécifier en octet.<br>
  • Vous pouver également utiliser la fonction copier()
  • qui fait une copie par lot de 10 Ko.<br>
  • Le fichier copier aura le nom de copie de [fichier à copier].
  • @param tailleCopie C'est la taille du lot de copie.
  • @throws IOException
  • @see <b>copier</b>(<b>File</b> ficLu,<b>File</b> ficEcrit [,<b>int</b> tailleCopie)
  • @see <b>copier</b>(<b>String</b> ficLu,<b>String</b> ficEcrit [,<b>int</b> tailleCopie)
  • @see <b>copier</b>()
  • @see <b>copier</b>(<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • /
public void copier(int tailleCopie) throws IOException{ File ficEcrit = new File( this.getPath()+File.separatorChar+"Copie de "+this.getName()); this.copier(ficEcrit,tailleCopie); } /**
  • Cette méthode fait une copie par lot de 10 Ko.<br>
  • Pour fair une copie par lot de taille différentes,
  • utilisez la fonction copier(int tailleCopie).<br>
  • Le fichier copier aura le nom de copie de [fichier à copier].
*
  • @throws IOException
  • @see <b>copier</b>(<b>File</b> ficLu,<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficLu,<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>int</b> tailleCopie)
  • @see <b>copier</b>(<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • /
public void copier() throws IOException{ this.copier(10240); } /**
  • Cette méthode permet de copier le fichier le fichier courant
  • dans un fichier définit par ficEcrit.<br>
  • Elle permet aussi de choisir la taille du lot de copie
  • @param ficEcrit Définit le fichier dans lequel copier.
  • @param tailleCopie Définit la taille du lot de copie.
  • @throws IOException
  • @see <b>copier</b>(<b>File</b> ficLu,<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficLu,<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>([<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • /
public void copier(File ficEcrit, int tailleCopie) throws IOException{ CopieFile.copier(this,ficEcrit,tailleCopie); } /**
  • Cette méthode permet de copier le fichier courant
  • vers le fichier ficEcrit définit par une chaine.<br>
  • Elle permet aussi de choisir la taille du lot de copie.
  • @param ficEcrit Définit le fichier dans lequel faire la copie.
  • @param tailleCopie Définit la taille du lot de copie.
  • @throws IOException
  • @see <b>copier</b>(<b>File</b> ficLu,<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficLu,<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>([<b>int</b> tailleCopie])
  • /
public void copier(String ficEcrit, int tailleCopie) throws IOException{ File fficEcrit = new File(ficEcrit); this.copier(fficEcrit,tailleCopie); } /**
  • Cette classe static permet de copier un fichier ficLu vers un fichier ficEcrit.<br>
  • Elle permet aussi de définir la taille du lot de copie.
  • @param ficLu Fichier à copier
  • @param ficEcrit Fichier vers lequel effectuer la copie
  • @param tailleCopie Taille du lot de copie
  • @throws IOException
  • @see <b>copier</b>(<b>String</b> ficLu,<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>([<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • /
public static void copier(File ficLu, File ficEcrit, int tailleCopie) throws IOException{ FileInputStream read = new FileInputStream(ficLu); try { FileOutputStream write = new FileOutputStream(ficEcrit); try { byte[] tabLu = new byte[tailleCopie]; int nbLu; while((nbLu = read.read(tabLu)) > 0){ write.write(tabLu,0,nbLu); } } finally { write.close(); } } finally { read.close(); } } /**
  • Cette classe static permet de copier un fichier ficLu vers un fichier ficEcrit.<br>
  • Elle permet aussi de définir la taille du lot de copie.
  • @param ficLu Fichier à copier
  • @param ficEcrit Fichier vers lequel effectuer la copie
  • @param tailleCopie Taille du lot de copie
  • @throws IOException
  • @see <b>copier</b>(<b>File</b> ficLu,<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>([<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • /
public static void copier(String ficLu, String ficEcrit, int tailleCopie) throws IOException{ File fficLu = new File(ficLu); File fficEcrit = new File(ficEcrit); CopieFile.copier(fficLu, fficEcrit, tailleCopie); } /**
  • Cette méthode permet de copier le fichier le fichier courant
  • dans un fichier définit par ficEcrit.<br>
  • Elle permet aussi de choisir la taille du lot de copie
  • @param ficEcrit Définit le fichier dans lequel copier.
  • @param tailleCopie Définit la taille du lot de copie.
  • @throws IOException
  • @see <b>copier</b>(<b>File</b> ficLu,<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficLu,<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>([<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • /
public void copier(File ficEcrit) throws IOException{ CopieFile.copier(this,ficEcrit); } /**
  • Cette méthode permet de copier le fichier courant
  • vers le fichier ficEcrit définit par une chaine.<br>
  • La taille du lot de copie est 10 Ko.
  • @param ficEcrit Définit le fichier dans lequel faire la copie.
  • @param tailleCopie Définit la taille du lot de copie.
  • @throws IOException
  • @see <b>copier</b>(<b>File</b> ficLu,<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficLu,<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>([<b>int</b> tailleCopie])
  • /
public void copier(String ficEcrit) throws IOException{ File fficEcrit = new File(ficEcrit); this.copier(fficEcrit); } /**
  • Cette classe static permet de copier un fichier ficLu vers un fichier ficEcrit.<br>
  • La taille du lot de copie est 10 Ko.
  • @param ficLu Fichier à copier
  • @param ficEcrit Fichier vers lequel effectuer la copie
  • @param tailleCopie Taille du lot de copie
  • @throws IOException
  • @see <b>copier</b>(<b>String</b> ficLu,<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>([<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • /
public static void copier(File ficLu, File ficEcrit) throws IOException{ CopieFile.copier(ficLu, ficEcrit,10240); } /**
  • Cette classe static permet de copier un fichier ficLu vers un fichier ficEcrit.<br>
  • La taille du lot de copie est 10 Ko.
  • @param ficLu Fichier à copier
  • @param ficEcrit Fichier vers lequel effectuer la copie
  • @param tailleCopie Taille du lot de copie
  • @throws IOException
  • @see <b>copier</b>(<b>File</b> ficLu,<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>File</b> ficEcrit [,<b>int</b> tailleCopie])
  • @see <b>copier</b>([<b>int</b> tailleCopie])
  • @see <b>copier</b>(<b>String</b> ficEcrit [,<b>int</b> tailleCopie])
  • /
public static void copier(String ficLu, String ficEcrit) throws IOException{ File fficLu = new File(ficLu); File fficEcrit = new File(ficEcrit); CopieFile.copier(fficLu, fficEcrit); } }

Conclusion :


Pour copier un fichier, il suffit d'utiliser une des méthodes prévu à cette effet.
En étudiant, ce code, vous remarquerez que quelque soit la méthode utiliser, c'est au final toujours la même qui se charge de la copie.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
samedi 29 juillet 2006
Statut
Membre
Dernière intervention
23 octobre 2008

1) Le 10Ko correspond à la taille du buffer de copie. C'est le tableau qui contient les données en provenance du fichier à copier et à destination du fichier de destination. En somme plus la taille de ce tableau est élevé, moins tu feras d'accès au disque mais plus cela nécessitera de mémoire dans ton application java.

2) Il est exacte que j'ai beaucoup complexifié le travail mais lorsque j'écrit des fichiers tels que celui-ci j'aime à ce qu'il y ait autant de fonctionnalités que possible (toutes celles auxquelles je pense) et que les données soit paramétrables au maximum (ça peut toujours être utile).

3) Pour ce qui est de faire une copie simple de fichier, tu dispose de la dernières méthodes du fichier :

public static void copier(String ficLu, String ficEcrit) throws IOException;
Messages postés
4
Date d'inscription
mardi 4 avril 2006
Statut
Membre
Dernière intervention
3 novembre 2008

moi je comprends pas pourquoi ce 10Ko qu'il traine partout. Aucune methode pour faire de la copie de fichier simplement comme tous les shells le proposent. Je trouve c un avis personnel que tu as complique un boulot simple
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
Effectivement, aucun flux n'est fermés :s, merci de corriger cela rapidement. Ah ces nouveaux codeurs Java !!! :p (c gentil ;-))
Messages postés
629
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
9 octobre 2006

Par hasard, n'oublierais-tu pas de fermer tes streams ? Voici le code propre, avec fermeture des streams sur un finally d'un try. Car si tu as une exception au milieu de la copie (mémoire ou disque plein par exemple), il faut bien fermer les stream, sinon ton fichier sera toujours marqué comme "tenu" en écriture, et tu auras du mal à l'ouvrir par exemple.

FileInputStream read = new FileInputStream(ficLu);
try {
FileOutputStream write = new FileOutputStream(ficEcrit);
try {
byte[] tabLu = new byte[tailleCopie];
int nbLu;
while((nbLu = read.read(tabLu)) > 0){
write.write(tabLu,0,nbLu);
}
} finally {
write.close();
}
} finally {
read.close();
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.