Способ печати в текстовый файл - PullRequest
0 голосов
/ 25 июня 2018

У меня есть Java-программа, заваленная значениями, которые я хочу записать в текстовый файл. Я новичок в этом языке и нахожу его не таким простым.

Я создал Logger класс:

public static void loggerMain(String content) {    
    try {
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("debug.txt", true)));
        out.println(content);
        out.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
}

Затем я вызываю метод в другом классе:

Logger.loggerMain("testing");

Он регистрирует строку, но если я затем снова запускаю скрипт, он добавит эту строку в новую строку. Но я не хочу, чтобы один и тот же println добавлялся при каждом вызове скрипта. Я хочу переопределить файл. Как бы я пошел по этому поводу?

Если я изменю аргумент FileWriter на False, файл будет регистрировать только последний вызов метода. e.g.:

Logger.loggerMain("testing1");
Logger.loggerMain("testing2");

Только Logger.loggerMain("testing2"); будет зарегистрировано. Я знаю почему, это потому, что я создаю новый файл каждый раз, когда вызываю метод ... но я действительно не знаю, как это решить!

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Просто повторение другого ответа :

class Logger {
    private static boolean FIRST_CALL = true;

    public static void loggerMain(String content) {    
        try (
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("debug.txt", !FIRST_CALL)))) {
            FIRST_CALL = false;
            out.println(content);
        } catch (IOException e) {
            //exception handling left as an exercise for the reader
        }
    }
}
  1. try-with-resources избавит вас от явного close() вызова и правильно закроет ресурс независимо от того, завершил ли он блок нормально или с исключением.
  2. Это субъективно: так как код в любом случае коснется FIRST_CALL, я чувствую, что его проще установить без дополнительной проверки.
0 голосов
/ 25 июня 2018

Если я вас правильно понял, вы хотите очищать журнал при каждом запуске программы.Это можно сделать с помощью следующего дополнения к классу Logger:

class Logger {
    private static boolean FIRST_CALL = true;

    public static void loggerMain(String content) {    
        try {
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("debug.txt", !FIRST_CALL)));

            if(FIRST_CALL){
                FIRST_CALL = false;
            }
            out.println(content);
            out.close();
        } catch (IOException e) {
            //exception handling left as an exercise for the reader
        }
    }
}

С помощью переменной FIRST_CALL мы отслеживаем, был ли регистратор запущен впервые в текущем контексте скрипта.Если это так, мы перезаписываем файл, передавая false (!FIRST_CALL) в FileWriter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...