Java BufferedWriter可以';我不想改变数据

Java BufferedWriter可以';我不想改变数据,java,arrays,file,bufferedreader,bufferedwriter,Java,Arrays,File,Bufferedreader,Bufferedwriter,我希望你能在这方面帮助我,我正在阅读一个多行文件。我使用BufferedReader来分离数据。如果数据1与新数据1输入不匹配,它将使用BufferedWriter将新数据1输入替换为旧数据1。使用下面的代码,它确实更改了数据1,但附加了其他行数据2和3。我只想更改数据1,但行保持不变 Example(Input) abc, 123, 456, 3345 test, t245, 442, d444 dddd, 4444, ffff, 333 public void test(String D

我希望你能在这方面帮助我,我正在阅读一个多行文件。我使用BufferedReader来分离数据。如果数据1与新数据1输入不匹配,它将使用BufferedWriter将新数据1输入替换为旧数据1。使用下面的代码,它确实更改了数据1,但附加了其他行数据2和3。我只想更改数据1,但行保持不变

Example(Input)

abc, 123, 456, 3345
test, t245, 442, d444
dddd, 4444, ffff, 333

public void test(String DATA1, String DATA2) throws IOException{

    br = new BufferedReader(new FileReader(file));
    while ((CurrentLine = br.readLine()) != null) {

   String[] modify = CurrentLine.split(split);
   String data1 = modify[0];
   String data2 = modify[1];
   String data3 = modify[2];
   String data4 = modify[3];

     bw = new BufferedWriter(new FileWriter(file, true));

    if (!data1.contains(DATA1)) {

    StringBuilder sb = new StringBuilder();

    while(CurrentLine != null){
        sb.append(CurrentLine.replace(data1, DATA1));
        sb.append("\n");
        CurrentLine = br.readLine();

    }

    bw.write(sb.toString());

    RESIDENTS_OLDDETAILS = new File(oldfile);
    RESIDENTS_OLDDETAILS.delete();

    RESIDENTS_NEWDETAILS = new File(newfile);
    RESIDENTS_NEWDETAILS.renameTo(old);

    br.close();
    bw.close();

Example(Output of the above code)

newabc, t245, 442, d444
newabc, t245, 442, d444
newabc, t245, 442, d444

Expected output
aaa, 123, 456, 3345
test, t245, 442, d444
dddd, 4444, ffff, 333

Edited Expected output
aaa, 123, 456, 3345
test, t245, 442, d444
dddd, 4444, ffff, 333aaa, 123, 456, 3345
test, t245, 442, d444
dddd, 4444, ffff, 333

看看这些修改,您可能希望在检测到数据1不同后立即替换它,然后只需读取其余行并将它们附加到
StringBuilder

public static void main(String[] args) throws Exception {
    test("aaa", "bbb");
}

public static void test(String DATA1, String DATA2) throws IOException {
    String file = "data.txt";
    String newFile = "dataNew.txt";
    
    String CurrentLine = "";
    BufferedReader br = new BufferedReader(new FileReader(file));
    while ((CurrentLine = br.readLine()) != null) {

        String[] modify = CurrentLine.split(", ");
        String data1 = modify[0];
        String data2 = modify[1];
        String data3 = modify[2];
        String data4 = modify[3];

        BufferedWriter bw = new BufferedWriter(new FileWriter(newFile, true));

        if (!data1.contains(DATA1)) {
            StringBuilder sb = new StringBuilder();
            sb.append(CurrentLine.replace(data1, DATA1));
            sb.append("\n");

            while ((CurrentLine = br.readLine()) != null) {
                sb.append(CurrentLine);
                sb.append("\n");
            }

            bw.write(sb.toString());

            File RESIDENTS_OLDDETAILS = new File(file);
            RESIDENTS_OLDDETAILS.delete();

            File RESIDENTS_NEWDETAILS = new File(newFile);
            RESIDENTS_NEWDETAILS.renameTo(RESIDENTS_OLDDETAILS);

            br.close();
            bw.close();
            break;
        }
    }
}
输入:

美国广播公司,1234563345

测试,t245,442,d444

dddd,4444,ffff,333

输出:

aaa,1234563345

测试,t245,442,d444

dddd,4444,ffff,333


您的预期输出是什么?嗨,已经添加了。再次感谢您的时间。
文件
是否位于支持通过不同文件描述符从同一文件中读写的文件系统上?嗨,它将读取一个文件,如果与数据1不匹配,则删除该文件并在新文件中重写。嗨,不幸的是,它不会更改数据1,而是将第2行和第3行重新写入文件。@javasimple更新的答案。我刚刚调用了我的文件data.txt和dataNew.txt。显然,请使用您的数据文件名。您好,非常感谢,它确实更改了数据1,但不知怎的,它再次重写了。另外,也可以用相同的文本文件名进行修改?@javasimple我给出的答案就是这样。看看你编辑的代码和我发布的答案之间的差异。他们不一样。谢谢,这是我的错。是否可以编辑成相同的文件名?