Как вы обнаружили, 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
.)