Замена System.out на PrintWriter
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Стандартный вывод System.out является объектом PrintStream, который, в свою очередь, наследует от базового класса OutputStream. В классе PrintWriter имеется конструктор, который принимает в качестве аргумента выходной поток OutputStream. Таким образом, вы можете преобразовать поток стандартного вывода System.out в символьно-ориентированный поток PrintWriter:

//: io/ChangeSystemOut.java

// Преобразование System out в символьный поток PrintWriter.

import java.io.*;

public class ChangeSystemOut {

public static void main(String[] args) {

PrintWriter out = new PrintWriter(System.out, true);

out.println("Hello, world");

} }

Hello, world

 Важно использовать конструктор класса PrintWriter с двумя аргументами, и передать во втором аргументе true, чтобы обеспечить автоматический сброс буфера на печать, иначе можно вовсе не увидеть никакого вывода.

 

Перенаправление стандартного ввода/вывода

Класс System позволяет вам перенаправить стандартный ввод, вывод и поток ошибок. Для этого предусмотрены простые статические методы: setIn(InputStream); setOut(PrintStream); setErr(PrintStream). Перенаправление стандартного вывода особенно полезно тогда, когда ваша программа выдает слишком много сообщений сразу и вы попросту не успеваете читать их, поскольку они заменяются новыми сообщениями. Перенаправление ввода удобно для программ, работающих с командной строкой, в которых необходимо поддержать некоторую последовательность введенных пользователем данных. Вот простой пример, показывающий, как использовать эти методы:

//: io/Redirecting.java

// Перенаправление стандартного ввода/вывода.

import java.io.*;

public class Redirecting {

public static void main(String[] args) throws IOException {

PrintStream console = System.out;

BufferedInputStream in = new BufferedInputStream( new FileInputStream("Redirecting.java"));

PrintStream out = new PrintStream( new BufferedOutputStream(

   new FileOutputStream("test.out")));

System.setIn(in);

System.setOut(out);

System.setErr(out);

BufferedReader br = new BufferedReader( new InputStreamReader(System.in));

String s;

while((s = br.readLine()) != null)

System.out.println(s);

out.close(); // Remember this!

System.setOut(console);

}

}

Программа присоединяет стандартный ввод к файлу и перенаправляет, стандартный ввод и поток для ошибок в другие файлы. Обратите внимание на сохранение ссылки на исходный объект System.out в начале программы и его восстановление в конце. Перенаправление основано на байтовом, а не на символьном вводе/выводе, поэтому в примере используются InputStream и OutputStream, а не их символьно-ориентированные эквиваленты Reader и Writer.

 

Класс Scanner

Класс Scanner позволяет существенно упростить решение задачи, считывания чисел, введенных с клавиатуры:

import java.util.* ;

class AvgNums {

public static void main ( String args[] ) {

Scanner conin = new Scanner (System.in) ;

int count = 0;

double sum = 0.0;

System.out.println( " B в e дит e числа для подсчета " ) ;

while ( conin.hasNext()) {

if(conin.hasNextDouble()){

sum+=conin.nextDouble();

count++ ;

}

else{

String str=conin.next();

if(str.equals("Y"))break;

else{

  System.out.println("O шибк a формата данных .");

return;

conin.close();

System.out.println("Cpe дн ee равно "+sum/count);

Эта программа читает числа с клавиатуры и суммирует их до тех пор, пока пользователь не введет символ "Y" . В таком случае она прекращает ввод и выводит среднее значение введенных чисел.

// Use Scanner to compute an average of the values in a file.

import java.util.*;

import java.io.*;

 

class AvgFile {

public static void main(String args[])

throws IOException {

 

int count = 0;

double sum = 0.0;

 

// Write output to a file.

FileWriter fout = new FileWriter("test.txt");

fout.write("2 3.4 5 6 7.4 9.1 10.5 done");

fout.close();

 

FileReader fin = new FileReader("Test.txt");

 

Scanner src = new Scanner(fin);

 

// Read and sum numbers.

while(src.hasNext()) {

if(src.hasNextDouble()) {

   sum += src.nextDouble();

   count++;

}

else {

   String str = src.next(); 

   if(str.equals("done")) break;

   else {

     System.out.println("File format error.");

     return;

   }

}

}

 

src.close();

System.out.println("Average is " + sum / count);

}

}

 

listing 24

// Use Scanner to read various types of data from a file.

import java.util.*;

import java.io.*;

 

class ScanMixed {

public static void main(String args[])

throws IOException {

 

int i;

double d;

boolean b;

String str;

 

// Write output to a file.

FileWriter fout = new FileWriter("test.txt");

fout.write("Testing Scanner 10 12.2 one true two false");

fout.close();

 

FileReader fin = new FileReader("Test.txt");

 

Scanner src = new Scanner(fin);

 

 

// Read to end.

while(src.hasNext()) {

if(src.hasNextInt()) {

   i = src.nextInt();

   System.out.println("int: " + i);

}

else if(src.hasNextDouble()) {

   d = src.nextDouble();

   System.out.println("double: " + d);

}

else if(src.hasNextBoolean()) {

   b = src.nextBoolean();

   System.out.println("boolean: " + b);

}

else {

   str = src.next();

   System.out.println("String: " + str);

}

}

 

src.close();

}

}

 

listing 25

// Use Scanner to compute an average a list of

// comma-separated values. 

import java.util.*;

import java.io.*;

 

class SetDelimiters {

public static void main(String args[])

throws IOException {

 

int count = 0;

double sum = 0.0;

 

// Write output to a file.

FileWriter fout = new FileWriter("test.txt");

 

// Now, store values in comma-separated list.

fout.write("2, 3.4, 5,6, 7.4, 9.1, 10.5, done");

fout.close();

 

FileReader fin = new FileReader("Test.txt");

 

Scanner src = new Scanner(fin);

 

// Set delimiters to space and comma.

src.useDelimiter(", *");

 

// Read and sum numbers.

while(src.hasNext()) {

if(src.hasNextDouble()) {

   sum += src.nextDouble();

   count++;

}

else {

   String str = src.next(); 

   if(str.equals("done")) break;

   else {

     System.out.println("File format error.");

     return;

   }

}

}

 

src.close();

System.out.println("Average is " + sum / count);

}

}

Дата: 2019-04-23, просмотров: 47.