Форматирование вывода в файл - PullRequest
0 голосов
/ 27 июня 2018

У меня есть метод класса, который записывает вывод в файл, и я хочу больше контроля над указанием формата.

public class Logger {

    private static boolean FIRST_CALL = true;

    public static void log(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
        }
    }

}

Я не уверен, как это сделать. изменение println на printf создает целый ряд проблем.

Например, метод я называю следующим образом:

Logger.log("testval=" + testVal);

Где testVal будет, например, double. Он вывел бы 1.9547E-5, но вместо этого я бы хотел получить его в десятичном формате.

Любая помощь приветствуется. Я новичок в Java.

Ответы [ 3 ]

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

Вы можете использовать String.format(). В вашем примере:

Logger.log(String.format("testval=%f", testVal));
0 голосов
/ 27 июня 2018

Ну, если бы исправить ваш код на двоих, я бы написал так:

 private void log(double )
 {
      // use try-with-resource - it's better
      try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("debug.txt", !FIRST_CALL))))
      {
          if(FIRST_CALL) {
              FIRST_CALL = false;
          }

          out.printf("value = %5.7f\n", d);
          out.close();
     } catch (IOException e) {
          e.printStackTrace();
          throw new RuntimeException(e);
     }
 }

и назовите этот код:

   log(1.9547E-5)
0 голосов
/ 27 июня 2018

Посмотрите на класс MessageFormat .

Вы можете сделать что-то вроде

Logger.log(MessageFormat.format("testval={0}", testVal));

Как и printf, вы можете настроить формат вывода. См. Javadoc для всех вариантов.

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