1、只有输出流才有打印流:PrintWriter和PrintStream分别针对字符和字节,提供了重载的print,Println方法用于多种数据类型的输出。PrintWriter和PrintStream操作不会抛出异常,数据没打印出来也不会抛异常。
2、System.out.print(Object object)调用的是Object实体类的toString()方法。
3、PrintWriter和PrintStream有自动的flush功能,不需要手动调用flush方法。*这里必须强调一点:PrintWriter的自动flush功能,只有在new PrintWriter对象的时候调用PrintWriter(Writer out, boolean autoFlush),并将 autoFlush设置为true才会自动flush,否则不会自动flush,必须手动printWriter.flush()才能成功打印数据。
     另外,PrintWriter方法不仅可以套在Writer字符输出流的外面,还可以套在字节输出流外面,PrintWriter的构造方法如下:
Java IO学习笔记(四)打印流-LMLPHP
PrintStream的具体构造方法如下图:
Java IO学习笔记(四)打印流-LMLPHP
4、System.out.println()中,java.lang.System.out中的out就是PrintStream类型的。
 
练习小程序1:
package test.io.print;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class PrintStreamTest {
     public static void main(String args[]){
           PrintStream ps = null;
           FileOutputStream fos = null;
           try {
                fos = new FileOutputStream("E:/技术学习/java/test/Socket/test6.txt");
                ps = new PrintStream(fos);
                System.setOut(ps);//不再是控制台输出,而是输出到FileOutputStream所指向的文件中。
                for(int i=0; i<3000; i++){
                     System.out.print(i+" ");
                }
           } catch (FileNotFoundException e) {
                e.printStackTrace();
           } finally{
                try {
                     if(ps != null){
                           ps.close();
                     }
                     if(fos != null){
                           fos.close();
                     }
                }catch (IOException e){
                     e.printStackTrace();
                }
           }    
     }
}
 
练习小程序2:从控制台输入内容,并将控制台输入的内容打印到文件中,类似于记日志
package test.io.print;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Date;
 
public class PrintWriterTest {
    public static void main(String args[]){
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s = null;
        PrintWriter pw = null;
        try {
            //PrintWriter构造方法将是否自动flush设置成了true,即可自动flush,如果没设置true,则必须手动调用flush方法,才能把内容打印到文件中
            pw = new PrintWriter(new FileWriter("E:/技术学习/java/test/Socket/test7.txt",true),true);
            while((s=bf.readLine()) != null){
                if(s.equals("exit")){
                    break;
                }
                System.out.println(s);
                pw.println("---------------------------------------");
                pw.println(s);
                //pw.flush();
            }
            pw.println("-------------"+new Date()+"------------");
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                if(bf != null){
                    bf.close();
                }
                if(pw != null){
                    pw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
04-13 17:36