web-dev-qa-db-fra.com

Création, écriture et modification du même fichier texte dans java

Disons que j'ai le code suivant:

import Java.io.BufferedReader;
import Java.io.BufferedWriter;
import Java.io.File;
import Java.io.FileReader;
import Java.io.FileWriter;
import Java.io.IOException;

public class EditFile {

    public static void main(String[] args) {

        try{
            String verify, putData;
            File file = new File("file.txt");
            file.createNewFile();
            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write("Some text here for a reason");
            bw.flush();
            bw.close();
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            while( br.readLine() != null ){
                verify = br.readLine();
                if(verify != null){
                    putData = verify.replaceAll("here", "there");
                    bw.write(putData);
                }
            }
            br.close();


        }catch(IOException e){
        e.printStackTrace();
        }
    }

}

Tout ce que je voulais faire était d'écrire quelque chose dans un fichier texte, dans mon cas "Du texte ici pour une raison". Ensuite, pour lire les données de mon fichier, et enfin pour changer mon texte de mon fichier de "Certains textes ici pour une raison" dans "Certains textes là pour une raison". J'ai exécuté le code mais tout ce qui se passe est d'écrire dans mon fichier "Du texte ici pour une raison".

J'ai essayé de comprendre ce qui pouvait mal se passer dans mon code, mais malheureusement c'était en vain. Tout conseil ou réécriture est très apprécié de moi.

6
Vlad Dumitrache

Changez votre code pour cela:

import Java.io.BufferedReader;
import Java.io.BufferedWriter;
import Java.io.File;
import Java.io.FileReader;
import Java.io.FileWriter;
import Java.io.IOException;

public class EditFile {

    public static void main(String[] args) {

        try{
            String verify, putData;
            File file = new File("file.txt");
            file.createNewFile();
            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write("Some text here for a reason");
            bw.flush();
            bw.close();
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);

            while( (verify=br.readLine()) != null ){ //***editted
                       //**deleted**verify = br.readLine();**
                if(verify != null){ //***edited
                    putData = verify.replaceAll("here", "there");
                    bw.write(putData);
                }
            }
            br.close();


        }catch(IOException e){
        e.printStackTrace();
        }
    }

}

Le problème est que vous appelez br.readLine() deux fois, ce qui provoque l'application à lire line1 puis line2 et dans votre cas, vous n'avez qu'une seule ligne ce qui signifie que votre programme l'a lu sous la forme conditionnelle et quand il vient pour le déclarer à la variable verify, il s'arrête car vous n'avez plus de données pour lire votre fichier.

7
Yehia Awad

Je le ferais de cette façon:

import Java.io.*;

public class EditFile {

public static void main(String[] args) {

    try{
        String verify, putData;
        File file = new File("file.txt");
        file.createNewFile();
        FileWriter fw = new FileWriter(file);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write("Some text here for a reason");
        bw.flush();

        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        while( (verify=br.readLine()) != null )
        { 
            if(verify != null)
            {
                putData = verify.replaceAll("here", "there");
                bw.write(putData);
            }
        }
        br.close();
        bw.close();

    }catch(IOException e){
    e.printStackTrace();
    }
}
}
1
Bhanupriya

utiliser ce code, je l'ai utilisé pour supprimer les journaux et les instructions System.out dans le fichier Java. Il suffit de modifier la chaîne de correspondance et de remplacement.

import Java.io.BufferedReader;
import Java.io.BufferedWriter;
import Java.io.File;
import Java.io.FileReader;
import Java.io.FileWriter;
import Java.util.ArrayList;
import Java.util.List;
import Java.util.Scanner;

public class FileReplace {
    List<String> lines = new ArrayList<String>();
    String line = null;
    Scanner scan = null;

    public void doIt() {
        scan = new Scanner(System.in);

        while (true) {
            try {

                System.out
                        .println("enter qualified file name ex.D:\\shiv\\shiv Android all\\Main work space\\Welcomescreen1.Java");
                String path = scan.nextLine();
                File f1 = new File(path);
                FileReader fr = new FileReader(f1);
                BufferedReader br = new BufferedReader(fr);
                int i = 0;
                while ((line = br.readLine()) != null) {
                    if (line.contains("System.out")) {
                        line = line.replace("System.out", "//");
                    } else if (line.contains("Log.")) {
                        line = line.replace("Log", "//");
                    }

                    lines.add(i, line);
                    i++;
                }
                fr.close();
                br.close();

                FileWriter fw = new FileWriter(f1);
                BufferedWriter out = new BufferedWriter(fw);
                for (int j = 0; j < lines.size(); j++) {
                    System.out.println(j + "." + lines.get(j));
                    out.append(lines.get(j));
                    out.newLine();
                }

                out.flush();
                out.close();

                System.out
                        .println("====================work done===================");

            } catch (Exception ex) {
                ex.printStackTrace();
            }

        }

    }

    public static void main(String args[]) {

        FileReplace fr = new FileReplace();

        fr.doIt();

    }
}
0
shiv
import Java.io.*;

public class TextFile
{
    public static void main(String[] args)
    {
        try
        {
            String verify, putData;
            File file = new File("G:\\Dairy.txt");
            file.createNewFile();
            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write("I am Shah Khalid");
            bw.flush();

            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);

            while( (verify=br.readLine()) != null )
            { 
                if(verify != null)
                {
                    putData = verify.replaceAll("here", "there");
                    //bw.write(putData); 
                }
            }
            br.close();
            bw.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        System.out.println("Shah");
    }
}

Il n'est pas nécessaire de taper bw.write(putData);, car il affichera simplement l'instruction deux fois.
Tout ce que vous voulez dans un fichier, indiquez simplement le chemin correct du fichier et utilisez le code ci-dessus en conséquence.

0
Shah Khalid