Lire et ecrire dans un fichier java

Résolu
cabistos Messages postés 20 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 1 juin 2014 - Modifié par Whismeril le 8/04/2014 à 11:12
cabistos Messages postés 20 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 1 juin 2014 - 8 avril 2014 à 16:42
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

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
8 avril 2014 à 15:47
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();
    }

}
2
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
Modifié par cs_Julien39 le 8/04/2014 à 11:21
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.
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
8 avril 2014 à 13:35
Il faut enlever out.write(line); et le remplacer et non l'ajouter, je pense que c'est ce que tu as fait non ?
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
8 avril 2014 à 14:07
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
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
8 avril 2014 à 15:43
Attend, je vais tester chez moi et je te dis.
1
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
8 avril 2014 à 11:12
Ajout des balises de coloration syntaxique.
Voir ici
0
cabistos Messages postés 20 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 1 juin 2014
8 avril 2014 à 12:19
Merci cs_Julien39 ca marche mais le programme ecrit dans le fichier cible chaque ligne 2 fois de suite
0
cabistos Messages postés 20 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 1 juin 2014
Modifié par cs_Julien39 le 8/04/2014 à 14:01
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();

 }
}
0
cabistos Messages postés 20 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 1 juin 2014
8 avril 2014 à 13:46
si j'enleve out.write(line); et je la remplace par out.println(line) le fichier cible devient vide
0
cabistos Messages postés 20 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 1 juin 2014
8 avril 2014 à 14:32
Merci , mais le fichier cible est vide :(
0
cabistos Messages postés 20 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 1 juin 2014
Modifié par cabistos le 8/04/2014 à 16:06
ca marche :DD merciiiiiiiii enormement Julien
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
8 avril 2014 à 16:09
Dans ce cas, peux tu marquer le sujet comme résolu et cliquer sur le + associé à ma réponse stp ?
0
cabistos Messages postés 20 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 1 juin 2014
8 avril 2014 à 16:42
bien sûr
0
Rejoignez-nous