@pfedorov031090

В программе необходимо 2 раза использовать Printwriter. Первый работает второй нет?

Пишу шаблонизатор. Есть большой шаблон в который надо вставить данные из файла, так нужно сделать столько раз, сколько строк в файле Data. Применяю Printwriter для записи в файл. Первый цикл, который записывает шапку шаблона отрабатывает исправно, второй ничего не пишет. Не могу разобраться почему. Пробовал flush(), создавать на второй цикл новый Printwriter. Не помогает. Может кто подскажет почему. Если вместо второго неработающего Printwriter цикла сделать вывод в консоль. данные выводятся корректно. т.е. дело именно в Printwriter.
import java.io.*;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) {
        String ShablonCurrentLine;
        String DataCurrentLine;
        String pathReadShablon = "...\\Shablon.csv";
        String pathReadData = "...\\data.csv";
        try {
            BufferedReader br = new BufferedReader(new FileReader(pathReadShablon)); //Читаем входной шаблон
            ShablonCurrentLine = br.readLine();
            String[] titleShablonLine = ShablonCurrentLine.split(";");
            BufferedReader br1 = new BufferedReader(new FileReader(pathReadData)); //Берем данные для подстановки
            while((DataCurrentLine = br1.readLine()) != null){// Построчно берем данные из Data
                String[] arrLineData = DataCurrentLine.split(","); // Разделяем строку на массив по разделителю
                String path = "C:\\..." + arrLineData[0] + ".csv";
                PrintWriter printWriter = new PrintWriter(path);
                for (int i = 0; i < titleShablonLine.length; i++) {
                    printWriter.print(titleShablonLine[i] + ";"); // Тут работает
                }
                printWriter.println();
                while((ShablonCurrentLine = br.readLine()) != null) {// Построчно берем данные из шаблона
                    String[] arrLineShablon = ShablonCurrentLine.split(";");
                    for (int i = 0; i < arrLineShablon.length; i++) {
                        arrLineShablon[i] = arrLineShablon[i].replaceAll("\\{\\{ station_code }}", arrLineData[1]);
                        arrLineShablon[i] = arrLineShablon[i].replaceAll("\\{\\{ station_ip_addr }}", arrLineData[2]);
                        arrLineShablon[i] = arrLineShablon[i].replaceAll("\\{\\{ camera_code }}", arrLineData[0]);
                        arrLineShablon[i] = arrLineShablon[i].replaceAll("\\{\\{ camera_ip_addr }}", arrLineData[3]);
                    }
                    for (int i = 0; i < arrLineShablon.length; i++) { 
                        printWriter.print(arrLineShablon[i] + ";");//Тут запись не работает
                    }
                    printWriter.println();
                }
                printWriter.close();
            }
            br.close();
            br1.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект