Чтобы распечатать консольный вывод в текстовый файл Java? - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь отправить вывод моей программы в текстовый файл results.txt. Вот моя попытка

public void writeFile(){
        try{    
            PrintStream r = new PrintStream(new File("Results.txt"));
            PrintStream console = System.out;

            System.setOut(r);
        } catch (FileNotFoundException e){
            System.out.println("Cannot write to file");
        }

Но каждый раз, когда я запускаю код и открываю файл, файл остается пустым. Вот что я хочу вывести:

public void characterCount (){
       int l = all.length();
       int c,i;
       char ch,cs;
       for (cs = 'a';cs <='z';cs++){
           c = 0;
           for (i = 0; i < l; i++){
               ch = all.charAt(i);
               if (cs == ch){
                   c++;
               }

           }
           if (c!=0){
//THIS LINE IS WHAT I'M TRYING TO PRINT
                System.out.println("The character"+ " "+ cs + " "+ "appears --> "+" "+c+" "+ "times");
           }
       }
    }

Где я ошибаюсь, что он продолжает создавать файл, а не записывать в него? (Кстати, у меня есть основной метод)

Ответы [ 3 ]

1 голос
/ 06 января 2020

Как вы обнаружили, System.out IS-A PrintStream и вы можете создать PrintStream, передав ему File, чтобы он записал в этот файл. В этом вся прелесть полиморфизма - ваш код записывает в PrintStream, и не имеет значения, какой это тип: консоль, файл, даже сетевое подключение или сетевой файл с зашифрованным zip-кодом.

Вместо этого связываться с System.setOut (обычно это плохая идея, поскольку у нее могут быть непреднамеренные побочные эффекты; делайте это только в случае необходимости (например, в некоторых тестах)), просто передайте PrintStream по вашему выбору вашему коду:

public void characterCount (PrintStream writeTo) {
    // (your code goes here)
    writeTo.println("The character"+ " "+ cs + " "+ "appears --> "+" "+c+" "+ "times");
    // (rest of your code)
}

Затем вы вызываете свой метод так, как хотите:

public static void main(String[] args) throws FileNotFoundException {
    new YourClass().characterCount(System.out);
    new YourClass().characterCount(new PrintStream(new File("Results.txt")));
}

(Обратите внимание, что я объявил, что main может выдать FileNotFoundException, поскольку new File("...") может выдать это Когда это произойдет, программа выйдет с сообщением об ошибке и трассировкой стека. Вы также можете обработать это, как вы делали это раньше в writeFile.)

1 голос
/ 06 января 2020

использование:

PrintWriter writer = new PrintWriter("Results.txt");

writer.print("something something");

не забудьте добавить:

writer.close();

, когда вы закончите!

0 голосов
/ 06 января 2020

JAVADO C: «PrintStream добавляет функциональность в другой выходной поток, а именно возможность удобной печати представлений различных значений данных.»

PrintStream может использоваться для записи в OutputStream, а не напрямую для файл. Таким образом, вы можете использовать PrintStream для записи в FileOutputStream и последующей записи в файл с этим.

Если вы просто хотите просто записать в файл, вы можете легко использовать ответ Cans!

...