PrintWriter和PrintStream都属于输出流,分别针对于字符和字节。
PrintWriter和PrintStream提供了重载的print.
println方法用于多种数据类型的输出。
PrintWriter和PrintStream的输出操作不会抛出异常。
PrintWriter和PrintStream有自动flush功能。
小例子1;
import java.io.*;
public class TestPrintStream1 {
public static void main(String args[]){
PrintStream ps = null;
try {
FileOutputStream fos = new FileOutputStream("d:\\logs1.txt");
ps = new PrintStream(fos);
}catch (IOException e){
e.printStackTrace();
}
if (ps!=null){
System.setOut(ps);//设置输出位置
}
int in = 0;
for (char c = 0;c<=50000;c++){
System.out.print(c+" ");
if (in++>=100){
System.out.println();
in=0;
}
}
}
}
小例子2,需要在DOS窗口带参运行。
import java.io.*;
public class TestPrintStream2 {
public static void main(String args[]){
String filename = args[0];
if (filename!=null){
list(filename,System.out);
}
}
public static void list(String f, PrintStream fs){
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String s = null;
while ((s=br.readLine())!=null){
fs.println(s);
}
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
第二个小例子运行结果;
小例子3;做一个日志记录控制台输入的信息以及日期;
import java.io.*;
import java.util.Date;
public class TestPrintStream3 {
public static void main(String args[]){
String s = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
FileWriter fw = new FileWriter("d:\\logs4.txt",true);
PrintWriter log = new PrintWriter(fw);
while ((s=br.readLine())!=null){
if (s.equalsIgnoreCase("exit")) break;
System.out.println(s.toUpperCase());
log.println("------");
log.println(s.toUpperCase());
log.flush();
}
log.println("==="+new Date()+"===");
log.flush();
log.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
例3运行结果;