Lire et ecrire dans un fichier java [Résolu]

Signaler
Messages postés
20
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
1 juin 2014
-
Messages postés
20
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
1 juin 2014
-
salut , voici mon code que je souhaite a travers lui copier des données a partir d'un fichier texte mais malheureusement le fichier cible est vide et si j'enleve le if le fichier est copié mais pas de retour en ligne dans le fichier cible
aidez moi svp
public class maClass {

  public static void main (String[] args) throws IOException {
   FileInputStream fin =  new FileInputStream("D://pfe//cbedext0513.txt");
   BufferedReader in = new BufferedReader(new InputStreamReader(fin)); 
   PrintWriter out = new PrintWriter (new FileWriter ("D://test"));
   String line;
   while ((line = in.readLine()) != null){
 
       if (line.substring(0,8)== "EXSTRS01") 
        out.write(line);
        
             
   }
   in.close();

 }
}

11 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
345
C'est tout simple, il faut libérer l'accès au fichier avec un out.close();

public class maClass {

    public static void main (String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new FileReader("D://pfe//cbedext0513.txt")); 
        PrintWriter out = new PrintWriter (new FileWriter ("D://test.txt"));
        String line = in.readLine();
        while (line != null){
            if (line.startsWith("EXSTRS01")){ 
                out.println(line);
            }
            line = in.readLine();
        }
        in.close();
        out.close();
    }

}
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
345
Salut,

Le test réalisé dans le if sera toujours faux, le == compare les références des objets, dans ton cas, ces références seront toujours différentes : d'où le fichier vide.

Pour t'en sortir en comparant les valeurs :
if (line.substring(0,8).equals("EXSTRS01"))


Ensuite pour le problème du retour à la ligne, c'est normal, tu ne demandes pas d'ajouter un retour à la ligne lorsque tu ajoutes du texte dans ton fichier :
tu peux utiliser au choix :
out.println(line);

ou
out.write(line+"\n");


Je préfère la première méthode qui t'évite une concaténation.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
345
Il faut enlever out.write(line); et le remplacer et non l'ajouter, je pense que c'est ce que tu as fait non ?
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
345
C'est pourtant ce qu'il faut faire :
public class maClass {

    public static void main (String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new FileReader("D://pfe//cbedext0513.txt")); 
        PrintWriter out = new PrintWriter (new FileWriter ("D://test.txt"));
        String line = in.readLine();
        while (line != null){
            if (line.startsWith("EXSTRS01")){ 
                out.println(line);
            }
            line = in.readLine();
        }
        in.close();
    }

}


J'ai modifié quelques autres choses pour que ce soit plus propre
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
345
Attend, je vais tester chez moi et je te dis.
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Ajout des balises de coloration syntaxique.
Voir ici
Messages postés
20
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
1 juin 2014

Merci cs_Julien39 ca marche mais le programme ecrit dans le fichier cible chaque ligne 2 fois de suite
Messages postés
20
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
1 juin 2014

public class maClass {

  public static void main (String[] args) throws IOException {
  
   BufferedReader in = new BufferedReader(new FileReader("D://pfe//cbedext0513.txt")); 
   PrintWriter out = new PrintWriter (new FileWriter ("D://test.txt"));
   String line = new String();
  String c1;
   while ((line = in.readLine()) != null){
    c1 = line.substring(0,8) ;
    if (c1.equals("EXSTRS01")){ 
       out.write(line);
        out.println(line);}
             
   }
   in.close();

 }
}
Messages postés
20
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
1 juin 2014

si j'enleve out.write(line); et je la remplace par out.println(line) le fichier cible devient vide
Messages postés
20
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
1 juin 2014

Merci , mais le fichier cible est vide :(
Messages postés
20
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
1 juin 2014

ca marche :DD merciiiiiiiii enormement Julien
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
345
Dans ce cas, peux tu marquer le sujet comme résolu et cliquer sur le + associé à ma réponse stp ?
Messages postés
20
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
1 juin 2014

bien sûr