在Java中创建,编写和编辑相同的文本文件


问题内容

假设我有以下代码:

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();
        }
    }

}

我要做的就是在文本文件中写一些东西,在我的例子中是“出于某种原因在这里写一些文本”。然后从文件中读取数据,最后从“有原因的一些文本”中的“有原因的一些文本”中更改文件中的文本。我运行了代码,但是所有发生的事情是在文件“某些原因在这里写”中。

我试图找出代码中可能出什么问题,但不幸的是,这是徒劳的。我非常感谢任何建议或重写。


问题答案:

将您的代码更改为:

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();
        }
    }

}

问题是您要调用br.readLine()两次,这会导致应用程序先读取第1行,然后读取第2行,在您的情况下,您只有一行,这意味着您的程序以条件形式读取了它,并且在将其声明为变量时verify,它正在停止,因为您没有更多数据可读取文件。