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 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

person javasimple    schedule 10.05.2015    source источник
comment
Каков ваш ожидаемый результат?   -  person Shar1er80    schedule 10.05.2015
comment
Привет, добавлено. Еще раз спасибо за ваше время.   -  person javasimple    schedule 10.05.2015
comment
Находится ли file в файловой системе, которая поддерживает чтение и запись через отдельные файловые дескрипторы из одного и того же файла?   -  person Mike Samuel    schedule 10.05.2015
comment
Привет, он прочитает файл, если не совпадает с данными 1, удалит файл и перезапишет в новый файл.   -  person javasimple    schedule 10.05.2015


Ответы (1)


Взгляните на эти модификации, вы захотите заменить data1 сразу после того, как обнаружите, что они разные, а затем просто прочитайте остальные строки и добавьте их в свой 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;
        }
    }
}

Вход:

азбука, 123, 456, 3345

тест, т245, 442, д444

дддд, 4444, фффф, 333

Выход:

ааа, 123, 456, 3345

тест, т245, 442, д444

дддд, 4444, фффф, 333

person Shar1er80    schedule 10.05.2015
comment
Привет, к сожалению, он не меняет data1, вместо этого он перезаписывает 2-ю и 3-ю строки в файл. - person javasimple; 10.05.2015
comment
@javasimple Обновленный ответ. Я просто назвал свои файлы data.txt и dataNew.txt. Очевидно, используйте ваши имена файлов данных. - person Shar1er80; 10.05.2015
comment
Привет, большое спасибо, однако он изменил data1, как-то снова переписал. Кроме того, можно ли внести изменения в то же имя текстового файла? - person javasimple; 10.05.2015
comment
@javasimple Предоставленный ответ, который я дал, делает именно это. Посмотрите на разницу между вашим отредактированным кодом и моим опубликованным ответом. Они не то же самое. - person Shar1er80; 10.05.2015
comment
Спасибо, мне было плохо. Можно ли редактировать в то же имя файла? - person javasimple; 10.05.2015
comment
@javasimple Да, но это другой вопрос. В этом вопросе мы записываем в другой файл, а затем переименовываем его в исходный файл. Если вы хотите читать/писать из/в один и тот же файл, посмотрите stackoverflow.com/questions/20753600/ - person Shar1er80; 10.05.2015