Проблемы с PrintWriter

Я пишу программу, предназначенную для проверки связи с онлайн-базой данных и записываю журнал статуса в .txt.

Всякий раз, когда я запускаю программу и открываю .txt, временная метка сообщает мне, что она только что была изменена, но она пуста.

public static void printToFile(String text) {
    String fileName = "log.txt";
    PrintWriter outputStream = null;

    try {
        outputStream = new PrintWriter(fileName);
        System.out.println("Printing to txt");
        outputStream.println("Debug");
    } catch (FileNotFoundException e) {
        System.out.println("Error opening the file " + fileName);
        outputStream.close();
    }
}

public static void pingDatabase(Connection conn) throws SQLException, InterruptedException {
    Date timeStamp = new Date(System.currentTimeMillis());
    do {
        if (conn.isValid(10000)) {
            System.out.println("Printtofile called");
            printToFile("Database is Online");
        } else {
            printToFile("Database is Offline");
        }
        Thread.sleep(10000);
    } while (true);

}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
59
2

Ответы 2

Поскольку это журнал, вам может потребоваться добавлять содержимое вместо записи каждый раз, и вам нужно будет сбрасывать содержимое в файл журнала после записи.

public static void printToFile(String text)  {
        String fileName = "log.txt";
        PrintWriter outputStream=null;
        try {
             outputStream =new PrintWriter(new FileWriter(fileName,true));
            System.out.println("Printing to txt");
            outputStream.append(text+"\n");
            outputStream.flush();//flushing to file
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Error opening the file " + fileName);

        }
        finally{
              outputStream.close();
        }
        }

новый FileWriter (имя_файла, истина) FileWriter является подклассом OutPutStreamWriter и true для открытия в режиме добавления

Пожалуйста, объясните, почему закрытие потока необходимо в блоке catch, но не в любое другое время, и почему IOException может возникнуть только из-за проблемы с открытием файла и ничего больше.

user207421 21.04.2018 13:24

@EJP только что закончил с одной частью, поэтому я буду работать над этим, а также буду искать это, и вы проголосовали против, вы также были бы оставлены комментарием

Roushan 21.04.2018 13:26

У вас нет информации о том, кто проголосовал против вашего ответа. Ваше редактирование предполагает, что исключение не было создано.

user207421 21.04.2018 13:28

Я знаю, и это действительно кошмар, кто голосовал против без комментариев, в то время, когда просто ответил, как один минт раньше

Roushan 21.04.2018 13:29

@EJP FileNotFoundException недостаточно, поскольку PrintWriter требовал IOException для перехвата

Roushan 21.04.2018 13:35

Это точка мой. Не все исключения здесь связаны с невозможностью открыть файл. Я уже сказал это.

user207421 21.04.2018 13:40

Спасибо, проблема исправлена, как я могу ограничить .text, чтобы он содержал только 10 последних входов в систему?

Lasse Fisker 21.04.2018 14:18

несколько способов обойти, за один прогон вы можете взять var и увеличить после каждой записи, и когда он достигнет десяти # делайте, что хотите

Roushan 21.04.2018 14:20

Вы не закрываете и не промываете PrintWriter, если нет исключения.

Вам также необходимо открыть выходной файл в режиме добавления, учитывая ваш текущий код, но было бы разумнее оставить его открытым. Накладные расходы на открытие и закрытие файла в сообщении огромны.

@Roushan Тот же ответ, что и что? Единственный ответ, который я вижу здесь, основан на предоставленной мной информации.

user207421 21.04.2018 13:38

какая информация предоставлена ​​вами? я не получаю таких

Roushan 21.04.2018 13:39

@Roushan Это то, что я сказал в своем ответе и в своем комментарии к вашему ответу, и, похоже, это то, на что yiu заявляет права собственности, которых у вас нет. Если у вас есть еще кое-что, сделайте это. Сейчас это просто шум.

user207421 21.04.2018 13:42

@downvoter ОК, что это? Вам не нужно закрывать или промывать PrintWriter? Ему не нужно открывать свой файл в режиме добавления? Не имеет смысла держать его открытым? Накладные расходы на открытие и закрытие одного сообщения не огромны? Пожалуйста.

user207421 23.04.2018 01:22

Другие вопросы по теме