BufferedWriter не пишет в файл - PullRequest
0 голосов
/ 12 марта 2020

Я пишу программу на Java для чтения значений температуры процессора на компьютере Linux и вывода результатов в файл каждые 4 секунды. Временные значения успешно возвращаются на консоль с интервалом, но не отображаются в файле и не выдают никаких ошибок. Я также впервые использую BufferedWriter, поэтому я прошу прощения, если я использую его неправильно.

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class tempapp{
    public static void main(String[] args) throws IOException, InterruptedException {
        String fileName = "temps.txt";
        TimerTask task = new TimerTask() {
            @Override
            public void run(){
                // task goes here

                List<String> commands = new ArrayList<>();
                //build command
                commands.add("/usr/bin/sensors");
                //args
                //commands.add("");
                System.out.println(commands);

                ProcessBuilder pb = new ProcessBuilder(commands);
                pb.directory(new File("/home/ethano"));
                pb.redirectErrorStream(true);
                Process process = null;
                try {
                    process = pb.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                //Read output
                StringBuilder out = new StringBuilder();
                BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = null, previous = null;
                while (true) {
                    try {
                        if (!((line = br.readLine()) != null)) break;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (!line.equals(previous)) {
                        previous = line;
                        out.append(line).append('\n');
                        System.out.println(line);
                        try {
                            File file = new File ("/home/ethano/Desktop/temps.txt");
                            BufferedWriter wr = new BufferedWriter(new FileWriter(file));
                        wr.write(line);
                        wr.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }

                //Check result
                try {
                    if (process.waitFor() == 0) {
                        //System.exit(0);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                //weird termination
                //System.err.println(commands);
                //System.err.println(out.toString());
                //System.exit(1);
            }
        };

        Timer timer = new Timer();
        long delay = 0;
        long intervalPeriod = 4 * 1000;

        //schedules task to run in interval
        timer.scheduleAtFixedRate(task, delay, intervalPeriod);


    }
}

1 Ответ

0 голосов
/ 12 марта 2020

Ваш писатель записывает каждую строку в файл.

Однако, поскольку вы заново открываете и усекаете файл перед каждой строкой, а вывод /usr/bin/sensors заканчивается пустой строкой файл будет содержать только эту последнюю пустую строку в конце.

Самый простой способ убедиться в этом - попросить ваш FileWriter добавить вместо усечения:

BufferedWriter wr = new BufferedWriter(new FileWriter(file, true));

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

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