IO流学习总结(下)---打印流

本文详细介绍了Java中的打印流PrintStream和PrintWriter,它们提供了方便的数据输出方式,能够将任意类型数据转化为字符串打印。PrintStream是System.out的实现类型,支持异常日志打印,而PrintWriter支持多种构造方式,包括指定文件、字符集和自动刷新功能。通过示例代码展示了如何使用这两个打印流,并指出在实际开发中通常使用PrintStream进行输出。
摘要由CSDN通过智能技术生成

之前打印信息需要使用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属于装饰设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值