之前打印信息需要使用OutputStream但是这样,所有数据输出会非常麻烦,String–>byte[],打印流中可以方便进行输出,
它的打印方法可以保证数值的表现形式不变。写的是什么样子,目的地就是什么样子 而且不抛异常
实际上 它是对FileoutputStream类的功能进行了包装一下
打印流的构造函数可以直接传入FileOuputStream的实例 意思就是说所有的输出是向文件之中
分为两类
一个类是字节打印流 PrintStream 针对字节
一类是字符打印流 PrintWriter 针对字符
两个都有自动刷新功能 意思就说不用flush就可以写入数据
*这里必须强调一点:PrintWriter的自动flush功能,只有在new PrintWriter对象的时候调用PrintWriter(Writer out, boolean autoFlush),并将 autoFlush设置为true才会自动flush,否则不会自动flush,必须手动printWriter.flush()才能成功打印数据。
打印流打印任意类型数据之前,会先把数据转成字符串然后再打印出去。
**1. 打印流很方便 可以打印任意的数据类型
2. 打印流可以选择控制台也可以选择文件作为目的地。**
先来介绍一下 字节打印流:PrintStream
两个作用 1.打印方便 2.可以打印异常日志信息
PrintStream对普通字节输出流的增强
System.out对应的类型就是PrintStream
对于基本数据类型的数据,print和println方法会先将它们转换成字符串的形式后再输出,而不是输出原始的字节内容,对于一个非基本数据类型的对象,print和println方法会先调用对象的toString方法,然后再输出toString方法返回的字符串。
print(数据类型 变量)
println(数据类型 变量)
printf(String format, Object... args)
/*File file=new File("D:\\x.txt");
PrintStream printStream=new PrintStream(file);
printStream.println("sdf");
printStream.println(12);//保存结果就是12
//保证数值的表现形式。原理:write(String.valueOf(i));将数值转成字符串。
printStream.print('x');
printStream.printf("%d,%s,%c,%f", 1,"sdf",'我',1.2);
printStream.println(new Animal("sd","22"));*/
//默认标准的输出流就是向控制台输出的,
/*System.setOut(printStream); //重新设置了标准的输出流对象
System.out.println("哈哈,猜猜我在哪里!!");
*/
//收集异常的日志信息。
File file=new File("D:\\xx.log");
PrintStream printStream=new PrintStream(new FileOutputStream(file,true));
try {
int a=4/0;
System.out.println(a);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace(printStream);
}
PrintWriter
构造函数可以接收四种类型的值。
1,字符串路径。
2,File对象。
对于1,2类型的数据,还可以指定编码表。也就是字符集。
3,OutputStream
4,Writer
对于3,4类型的数据,可以指定自动刷新。
注意:该自动刷新值为true时,只有三个方法可以用:println,printf,format
如果想要既有自动刷新,又可执行编码。如何完成流对象的包装?
PrintWrter pw =
new PrintWriter(new OutputSteamWriter(new FileOutputStream(“a.txt”),”utf-8”),true);
如果想要提高效率。还要使用打印方法。
PrintWrter pw =
newPrintWriter(new BufferdWriter(new OutputSteamWriter(
newFileOutputStream(“a.txt”),”utf-8”)),true);
例子:
public static void testPrintWriter() throws Exception {
PrintWriter pw = new PrintWriter("c:/b.txt", "gbk");
// pw.append("xxx");
// pw.println(55);
// pw.println('c');
// pw.printf("%.1s与%4s打价格战, %c", "京东","苏宁", 'a');
pw.close();
}
Scanner
public static void testScanner() throws Exception {
// Scanner scanner = new Scanner(new File("c:/test.txt"));
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.nextInt());
System.out.println(scanner.nextBoolean());
scanner.close();
}
总结:
1、PrintStream可以方便的完成输出的功能
2、在以后的输出中基本使用PrintStream完成,因为很方便
3、PrintStream属于装饰设计模式