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 :

Ecriture dans un fichier


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Par défaut Ecriture dans un fichier
    Bonjour,

    J'ai fait un petit programme qui lit toutes les lignes d'un fichier et les réécrit dans un autre fichier. Tout fonctionne bien, mais qd il me réécrit les lignes dans le fichier de sortie il ne va pas à la ligne. Je n'arrive pas à résoudre ce problème. Si qq'un pouvait m'aider, ce serait sympa

    Voici mon code :

    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
    public static void lectureFichier(String nom, String sortie){
     
    		try{
    			BufferedReader buffer = new BufferedReader(new FileReader(new File(nom)));
    			FileWriter out = new FileWriter(sortie, true);
    			while((line = buffer.readLine()) != null){
    				out.write(line, 0, line.length());	}
     
    			out.close();
    			buffer.close();
     
    			}catch(IOException e){
    				System.err.print(" "+ e.getMessage());
    			}
    	}

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    La ligne que tu lis ne contient plus le retour à la ligne.
    Tu dois donc le rajouter à la main quand tu ecris le fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while((line = buffer.readLine()) != null){
       out.write(line);	
       out.write("\n");
    }

  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
    Salut,



    Ton problème vient bien du fait que readLine() enlève les retour à la ligne... mais il y a d'autre problème moins visible :
    • La variable line n'est pas déclaré dans ta méthode. Je suppose donc que tu utilises un attribut static comme variable locale ce qui n'est pas très propre : à la fin de ta méthode tu conserves inutilement des objets en mémoire
    • En cas d'exception tu ne fermes pas tes fichiers...
    • Tu effectues une lecture/écriture ligne par ligne alors que tu n'en as pas le besoin : une lecture par bloc serait plus éfficace.
    • Il y a une conversion byte<->String<->byte inutile car tu ne fais qu'une copie de fichier : tu pourrais directement recopier les bytes ce qui évites cette conversion et ses problèmes potentielles...


    Bref ton code devrait plutôt ressembler à quelque chose du style :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	public static void lectureFichier(String nom, String sortie) {
     
    		try {
    			// On ouvre le fichier d'entrée que l'on ferme dans un finally
    			FileInputStream fis = new FileInputStream(nom);
    			try {
    				// On ouvre le fichier de sortie que l'on ferme dans un finally
    				FileOutputStream fos = new FileOutputStream(sortie);
    				try {
    					// On utilise un buffer pour la copie :
    					byte[] buf = new byte[8192];
    					int len;
     
    					while ( (len=fis.read(buf)) >= 0L ) {
    						fos.write(buf, 0, len);
    					}
     
    				} finally {
    					fos.close();
    				}
    			} finally {
    				fis.close();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}
    Sinon tu pourrais utiliser les Channels et la méthode transferTo(), qui peut être plus efficace pour les fichiers de grande taille :
    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
    18
    19
    20
    21
    22
    23
    	public static void lectureFichier(String nom, String sortie) {
     
    		try {
    			// On ouvre le fichier d'entrée que l'on ferme dans un finally
    			FileChannel in = new FileInputStream(nom).getChannel();
    			try {
    				// On ouvre le fichier de sortie que l'on ferme dans un finally
    				FileChannel out = new FileOutputStream(sortie).getChannel();
    				try {
     
    					in.transferTo(0, in.size(), out);
     
    				} finally {
    					out.close();
    				}
    			} finally {
    				in.close();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}

    a++

    PS : Note que tu devrais remonter une exception plutôt que de la traiter à ce niveau : sinon la méthode appelante n'a aucun moyen de savoir si le traitement a réussi ou pas...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Par défaut
    Merci beaucoup pour tout ces conseils je vais en tenir compte

Discussions similaires

  1. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46
  4. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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