betacode

Руководство Java PrintStream

  1. PrintStream
  2. PrintStream Constructors
  3. PrintStream Methods
  4. Examples
  5. checkError()
  6. print(..) *
  7. print(Object)
  8. println()
  9. println(..) *
  10. println(Object)
  11. printf(..) *
  12. format(..) *
  13. append(..) *

1. PrintStream

PrintStream - это подкласс FilterOutputStream, который используется для печати данных в управляемый им OutputStream. Он также рассматривается как инструмент для добавления функциональности (functionality) для этого OutputStream.
Характеристики of PrintStream:
Все методы of PrintStream не создают исключений I/O. Чтобы проверить, возникает ли исключение, вы можете вызвать метод checkError().
При желании, PrintStream способен автоматически сбрасывать (flush), это означает, что метод flush() будет вызван сразу после вызова println(..) или при печати текста, содержащего символ '\n'.
Все символы, напечатанные PrintStream, преобразуются в bytes с использованием заданной encoding или charset или системы по умолчанию, если не указано. Класс PrintWriter следует использовать в тех случаях, когда требуется писать символы вместо byte.
System.out
System.out - это очень распространенный и знакомый объект PrintStream, который используется для печати данных на экране Console. Это позволяет вам вспомнить классический код, который вы написали, когда начали изучать Java:
System.out.println("Hello World!");
Смотрите больше:
PrintWriter - это класс, аналогичный PrintStream, он используется для печати данных во внутренний Writer или OutputStream, которым он управляет.

2. PrintStream Constructors

Constructors для создания объекта PrintStream без автоматической очистки (flush):
public PrintStream(OutputStream out)

public PrintStream(File file) throws FileNotFoundException
public PrintStream(File file, Charset charset) throws IOException
public PrintStream(File file, String csn)
                      throws FileNotFoundException, UnsupportedEncodingException

public PrintStream(String fileName) throws FileNotFoundException  
public PrintStream(String fileName, Charset charset) throws IOException
public PrintStream(String fileName, String csn)
                      throws FileNotFoundException, UnsupportedEncodingException
Constructors для создания объекта PrintStream с опцией автоматической очистки (flush):
public PrintStream(OutputStream out, boolean autoFlush)
public PrintStream(OutputStream out, boolean autoFlush, Charset charset)
public PrintStream(OutputStream out, boolean autoFlush, String encoding)
                                             throws UnsupportedEncodingException
Constructors создают PrintStream для записи данных в OutputStream:
public PrintStream(OutputStream out)
public PrintStream(OutputStream out, boolean autoFlush)  
public PrintStream(OutputStream out, boolean autoFlush, String encoding)
                                                                    throws UnsupportedEncodingException  
public PrintStream(OutputStream out, boolean autoFlush, Charset charset)
Сonstructors создают PrintStream для записи данных в файл:
public PrintStream(File file)
public PrintStream(File file, Charset charset) throws IOException
public PrintStream(File file, String csn)
                            throws FileNotFoundException, UnsupportedEncodingException

public PrintStream(String fileName) throws FileNotFoundException  
public PrintStream(String fileName, Charset charset) throws IOException  
public PrintStream(String fileName, String csn)
                            throws FileNotFoundException, UnsupportedEncodingException

3. PrintStream Methods

Методы of PrintStream:
public boolean checkError()  
protected void setError()  
protected void clearError()  

public void print(boolean b)  
public void print(char c)  
public void print(int i)  
public void print(long l)  
public void print(float f)  
public void print(double d)
public void print(char[] s)  
public void print(String s)  

public void print(Object obj)  

public void println()  
public void println(boolean x)  
public void println(char x)  
public void println(int x)  
public void println(long x)
public void println(float x)  
public void println(double x)
public void println(char[] x)  
public void println(String x)  

public void println(Object x)  

public PrintStream printf(String format, Object... args)  
public PrintStream printf(Locale l, String format, Object... args)

public PrintStream format(String format, Object... args)  
public PrintStream format(Locale l, String format, Object... args)  

public PrintStream append(CharSequence csq)  
public PrintStream append(CharSequence csq, int start, int end)  
public PrintStream append(char c)
Другие методы переопределяют (override) методы родительского класса и не создают исключения:
public void write(int b)  
public void write(byte[] b)  
public void write(byte[] b, int off, int len)  

public void flush()  
public void close()

4. Examples

Получите трассировку стека (stack trace) из Exception.
GetStackTraceEx.java
package org.o7planning.printstream.ex;

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;

public class GetStackTraceEx {

    public static void main(String[] args) {
        try {
            int a = 100 / 0; // Exception occur here
        } catch (Exception e) {
            String s = getStackTrace(e);
            System.err.println(s);
        }
    }

    public static String getStackTrace(Throwable t) {
        OutputStream baos = new ByteArrayOutputStream();

        // Create PrintStream via PrintStream(OutputStream) constructor.
        PrintStream pw = new PrintStream(baos);

        // Call method: Throwable.printStackTrace(PrintStream)
        t.printStackTrace(pw);
        pw.close();

        String s = baos.toString();
        return s;
    }
}
Output:
java.lang.ArithmeticException: / by zero
    at org.o7planning.printstream.ex.GetStackTraceEx.main(GetStackTraceEx.java:11)

5. checkError()

Метод checkError() возвращает состояние ошибки этого PrintStream. Кроме того, метод flush() также вызывается, если PrintStream не был закрыт.
public boolean checkError()
Примечание: Все методы of PrintStream не вызывают исключение IOException, но как только в методах возникает исключение IOException, его статус - ошибка.
Это состояние ошибки of PrintStream очищается только при вызове функции clearError(), но это protected метод. Вы можете написать класс, расширяющий PrintStream, и переопределить (override) этот метод, если хотите его использовать (см. Пример ниже).
MyPrintStream.java
package org.o7planning.printstream.ex;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class MyPrintStream extends PrintStream {

    public MyPrintStream(File file) throws FileNotFoundException {
        super(file);
    }
    
    @Override
    public void clearError()  {
        super.clearError();    // Call protected method.
    }
}
Например: Используйте метод checkError() для проверки состояния ошибки of PrintStream:
PrintStream_checkError_ex1.java
package org.o7planning.printstream.ex;

import java.io.File;

public class PrintStream_checkError_ex1 {

    // Windows: C:/SomeFolder/logFile.txt
    private static final String logFilePath = "/Volumes/Data/test/logFile.txt";

    public static void main(String[] args) throws Exception {
        File logFile = new File(logFilePath);

        MyPrintStream mps = new MyPrintStream(logFile);
        int errorCount = 0;
        while (true) {
            // Write log..
            mps.println("Some Log..");
            Thread.sleep(1000);

            // Check if IOException happened.
            if (mps.checkError()) {
                errorCount++;
                mps.clearError();
                if (errorCount > 10) {
                    sendAlertEmail();
                    break;
                }
            }
        }
        mps.close();
    }

    private static void sendAlertEmail() {
        System.out.println("There is a problem in the Log system.");
    }
}

6. print(..) *

Метод print(..) используется для печати примитивного значения.
public void print(boolean b)  
public void print(char c)  
public void print(int i)  
public void print(long l)  
public void print(float f)  
public void print(double d)
public void print(char[] s)  
public void print(String s)
Например:
PrintStream_print_primitive_ex1.java
// System.out is an instance of PrintStream.
PrintStream ps = System.out;

ps.print(true);
ps.println();
ps.print(new char[] { 'a', 'b', 'c' });
ps.println();
ps.print("Text");
Output:
true
abc
Text

7. print(Object)

Преобразуйте объект в String с помощью метода String.valueOf(Object) и распечатайте результат.
public void print(Object obj) {
   this.write(String.valueOf(obj));
}
Например:
PrintStream_print_object_ex1.java
// System.out is an instance of PrintStream.
PrintStream ps = System.out;

Object obj1 = null;
ps.print(obj1);
ps.println();

Object obj2 = new Socket();
ps.print(obj2);
ps.println();

Object obj3 = Arrays.asList("One", "Two", "Three");
ps.print(obj3);
Output:
null
Socket[unconnected]
[One, Two, Three]

8. println()

Выведите символ новой строки. Метод flush() также вызывается, если этот PrintStream имеет режим автоматической очистки (auto flush).
public void println() {
    print('\n');
    if(autoFlush) this.flush();
}

9. println(..) *

Метод println(..) используется для печати примитивного значения и символа новой строки. Метод flush() также вызывается, если этот PrintStream имеет режим автоматической очистки (auto flush).
public void println(boolean x)  
public void println(char x)  
public void println(int x)  
public void println(long x)
public void println(float x)  
public void println(double x)
public void println(char[] x)  
public void println(String x)
Например:
PrintStream_println_primitive_ex1.java
// System.out is an instance of PrintStream.
PrintStream ps = System.out;

ps.println(true);

ps.println(new char[] { 'a', 'b', 'c' });

ps.println("Text");
Output:
true
abc
Text

10. println(Object)

Преобразуйте объект в String с помощью метода String.valueOf(Object), затем выведите результат и символ новой строки. Метод flush() также вызывается, если этот PrintStream имеет режим автоматической очистки (auto flush). Этот метод работает так же, как вызов print(Object), а затем println().
public void println(Object x) {
       this.write(String.valueOf(x));
       this.write("\n");
       if(this.autoFlush) this.flush();
}
Например:
PrintStream_println_object_ex1.java
// System.out is an instance of PrintStream.
PrintStream ps = System.out;

Object obj1 = null;
ps.println(obj1);

Object obj2 = new Socket();
ps.println(obj2);

Object obj3 = Arrays.asList("One", "Two", "Three");
ps.println(obj3);
Output:
null
Socket[unconnected]
[One, Two, Three]

11. printf(..) *

Удобный метод для записи отформатированной строки в этот PrintStream с использованием отформатированной строки формата и указанных аргументов.
public PrintStream printf(String format, Object... args)  
public PrintStream printf(Locale locale, String format, Object... args)
Этот метод работает аналогично приведенному ниже коду:
String result = String.format(format, args);
printStream.print(result);

// Or:
String result = String.format(locale, format, args);
printStream.print(result);
Смотрите также:

12. format(..) *

Этот метод работает так же, как метод printf(..).
public PrintStream format(String format, Object... args)  
public PrintStream format(Locale locale, String format, Object... args)
Это работает так, как показано в приведенном ниже коде:
String result = String.format(format, args);
printStream.print(result);

// Or:
String result = String.format(locale, format, args);
printStream.print(result);
Смотрите также:

13. append(..) *

Методы append(..) работают так же, как методы print(..). Единственное отличие заключается в том, что он возвращает этот PrintStream, поэтому вы можете вызвать следующий метод next вместо того, чтобы заканчиваться точкой с запятой ( ; ).
public PrintStream append(CharSequence csq)  
public PrintStream append(CharSequence csq, int start, int end)  
public PrintStream append(char c)
Например:
PrintStream_append_ex1.java
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);

ps.append("This").append(" is").append(' ').append('a').append(" Text");
ps.flush();

String text = baos.toString();
System.out.println(text);// This is a Text

Руководства Java IO

Show More