public class FusionFichiers { /** Chemin vers le fichier1 */ public static final String FICHIER1 = "a.mp3"; /** Chemin vers le fichier2 */ public static final String FICHIER2 = "b.mp3"; /**Chemin où sera produit le fichier fusion*/ public static final String FUSION = "c.mp3"; public static void main (String [] args) { //nous déclarons nos objets en dehors du //bloc try/catch BufferedInputStream bis1 = null; BufferedInputStream bis2 = null; BufferedOutputStream bos = null; try { //on instancie nos objets : //bis1 va lire le fichier1 //bis2 va lire le fichier2 //bos va ecrire le nouveau fichier bis1 = new BufferedInputStream(new FileInputStream(new File(FICHIER1))); bis2 = new BufferedInputStream(new FileInputStream(new File(FICHIER2))); bos = new BufferedOutputStream(new FileOutputStream(new File(FUSION))); //on crée un tableau de byte //pour indiquer le nombre de bytes //lus à chaque tour de boucle byte [] buf = new byte[8]; //Tant que l'affectation dans la variable est pssible, on boucle // Lorsque la lecture du fichier est terminée, l'affectation n'est //plus possible et on sort de la boucle System.out.println("Lecture de "+FICHIER1); while(bis1.read(buf) != -1) { //on écrit dans le fichier de sortie bos.write(buf); buf = new byte[8]; } System.out.println("Lecture de "+FICHIER2); while(bis2.read(buf) != -1) { //on écrit dans le fichier de sortie bos.write(buf); buf = new byte[8]; } System.out.println(" Fussion terminée"); } catch(FileNotFoundException e) { //Cette exception est levée si // l' objet BufferedInputStream ne trouve //aucun fichier System.out.println(e.getMessage()); } catch(IOException e) { //celle ci se produit lors d'une erreur // d'écriture et de lecture System.out.println(e.getMessage()); } finally { //on ferme nos fux de données dans un bloc finally //pour s'assurer que ces instructions seront exécutées // dans tous les cas même si une exception est levée try { if(bis1 != null) bis1.close(); if(bis2 != null) bis2.close(); if(bos != null) bos.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } } }
public void ecrireFichier( File f1, File f2 ) { BufferedInputStream entree1 = null; BufferedOutputStream sortie = null; int TAILLE_TAMPON = 1000; try { /* Ouvre les flux. */ entree1 = new BufferedInputStream( new FileInputStream( f1 ), TAILLE_TAMPON ); sortie = new BufferedOutputStream( new FileOutputStream( f2, true ), TAILLE_TAMPON ); /* * Lit le fichier reçu et écrit son contenu dans un fichier sur le * disque. */ byte[] tampon = new byte[TAILLE_TAMPON]; int longueur = 0; while ( ( longueur = entree1.read( tampon ) ) > 0 ) { sortie.write( tampon, 0, longueur ); } } catch ( IOException e ) { e.printStackTrace(); } finally { try { entree1.close(); } catch ( IOException ignore ) { } } }
Modifié par NHenry le 9/08/2014 à 20:02
Avec ta méthode, tu ignores les entêtes, et si les 2 fichiers ne sont pas configurés pareil (cadence d'échantillonnage, débit, ... différent) ça ne fonctionnera pas.