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的构造方法如下:
PrintStream的具体构造方法如下图:
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();
}
}
}
}