zoukankan      html  css  js  c++  java
  • (23)IO之打印流 PrintStream & Printwriter

    PrintStream

    PrintStream可以接受文件和其他字节输出流,所以打印流是对普通字节输出流的增强,其中定义了很多的重载的print()println(),方便输出各种类型的数据。

    PrintStream

    是一个字节打印流,System.out对应的类型就是PrintStream

    它的构造函数可以接收三种数据类型的值。

    1,字符串路径。

    2File对象。

    3OutputStream

    注意: 打印流的三种方法

     

    void print(数据类型 变量)

     

    println(数据类型 变量)

     

    printf(String format, Object... args) 

     

    可以自定数据格式

     

    print println方法的区别在于,一个换行一个不换行

     

    print 方法和write方法的却别在于,print提供自动刷新.

     

    普通的write方法需要调用flush或者close方法才可以看到数据.

     

    JDK1.5之后JavaPrintStream进行了扩展,增加了格式化输出方式,可以使用printf()重载方法直接格式化输出。但是在格式化输出的时候需要指定输出的数据类型格式。%d, %s, %f, %lf, %c

     

    PrintStream在实际中主要有下面两个用处

     

    1、把任意类型的数据自动转换为字符串输出,相当的方便。

     

    2、方便收集异常日志。

     

    现在说一下一直使用了那么久的System.out到底是什么,api文档直接查看可以知道System.out就是System内部维护的一PrintStream的对象,默认情况这个标准输出流,把内容输出到控制台,你完全可以使用System.setOut方法重新制定标准输出

     

    的位置,只需要传入一个相应的PrintStream参数即可。

     

    //重置标准输出流的位置

     

    System.setOut(printStream);

     

    System.out.println("哈哈哈,你猜猜我在那里呀!!");

     

    这是非常类似于C语言里面的freeopen操作。

     

    收集异常

     

    //收集异常的日志信息 默认情况下异常信息打印到控制台,产品部署到服务器上。而控制台上只能打印部分日志信息,会丢失很多。

     

    //这是我们需要把错误信息打印到文件,e.printStackTracePrintStream )传入一个PrintStream参数,打印到文件.但是有一点问题是,这个时候,输出的信息不会追加,而是不断的覆盖。一般日志文件我们用 .log结尾,用日期命名。

     1 //这个时候,可以给PrintStream 传入一个OutputStream 向下面这样 
     2         File logFile = new File("D:\2016722.log");
     3 //        PrintStream logPrintStream = new PrintStream(logFile);
     4         PrintStream logPrintStream = new PrintStream(new FileOutputStream(logFile, true));
     5         try
     6         {
     7             int c = 4/ 0;
     8             System.out.println("c" +c);
     9         } catch (Exception e)
    10         {
    11             e.printStackTrace(logPrintStream);
    12         }

    PrintWriter

    是一个字符打印流。构造函数可以接收四种类型的值。

    1,字符串路径。

    2File对象。

    对于12类型的数据,还可以指定编码表。也就是字符集。

    3OutputStream

    4Writer

    对于34类型的数据,可以指定自动刷新。

    注意:该自动刷新值为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);

     1 public static void testPrintWriter() throws Exception {
     2         PrintWriter pw = new PrintWriter("c:/b.txt", "gbk");
     3 
     4         // pw.append("xxx");
     5         // pw.println(55);
     6         // pw.println('c');
     7         // pw.printf("%.1s与%4s打价格战, %c", "京东","苏宁", 'a');
     8 
     9         pw.close();
    10 
    11     }
    12 
    13 
    14 // 下面是使用Scanner
    15 public static void testScanner() throws Exception {
    16         // Scanner scanner = new Scanner(new File("c:/test.txt"));
    17         Scanner scanner = new Scanner(System.in);
    18 
    19         System.out.println(scanner.nextInt());
    20         System.out.println(scanner.nextBoolean());
    21 
    22         scanner.close();
    23     }

     

     

     

     

  • 相关阅读:
    asp.net2.0中App_GlobalResources的使用
    KPI(Key Performance Indicators )
    Dictionary集合
    SQL连接查询1 内联接查询
    如何在Web.config中注册用户控件和自定义控件
    JavaScript中【数据类型】和【数组类型】的区别
    递归求斐波拉数列函数
    SQL连接查询2 外连接(左右联接查询)
    启示
    “帽子戏法”从何而来?
  • 原文地址:https://www.cnblogs.com/OliverZhang/p/6026590.html
Copyright © 2011-2022 走看看