首页 > 代码库 > java Print流 和 重定向

java Print流 和 重定向

可视化编辑器,alt+1到9键,切换到工具区,tab键,选择按钮,esc键,返回编辑

public class TestIO {
 public static void main(String[] args) {
  String filename = "D:" + File.separator + "hello.txt";
  File file = new File(filename);
  
  System.out.println("标准输出 -- 控制台");
  
  try {
   //FileOutputStream fileOut = new FileOutputStream(filename);
   PrintStream prt = new PrintStream(file);
   
   System.setOut(prt);
   
   System.out.println("标准输出重定向 -- 文件");
   
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 
 }
}

1、Print流 分为PrintStream和 PrintWriter 两种
 他们表示的含义可以从他们的构造函数中看出:
 PrintStream extends FilterOutputStream:
 private PrintStream(boolean autoFlush, OutputStream out, Charset charset) {
        super(out);
        this.autoFlush = autoFlush;
        this.charOut = new OutputStreamWriter(this, charset);
        this.textOut = new BufferedWriter(charOut);
    }
    首先它是一个OutputStream的子类
    其次它是一个包裹流,在其输出字节流的基础上包裹了转换流,转换成字符输出流,然后又包裹了一层缓冲输出流
    最后他的flush功能默认是关闭的,所以需要进行开启或者手动flush.
    PrintWriter extends Writer:
    public PrintWriter(OutputStream out, boolean autoFlush) {
        this(new BufferedWriter(new OutputStreamWriter(out)), autoFlush);

        // save print stream for error propagation
        if (out instanceof java.io.PrintStream) {
            psOut = (PrintStream) out;
        }
    }
    可以看出PrintWriter对于字节流的处理和PrintStream相同,不过它也可以用Writer流作为参数。
    public PrintWriter(Writer out,boolean autoFlush) {
        super(out);
        this.out = out;
        this.autoFlush = autoFlush;
        lineSeparator = java.security.AccessController.doPrivileged(
            new sun.security.action.GetPropertyAction("line.separator"));
    }
   
    2、关于输出流所提供的功能(方法)对比
        - Writer :// FileWriter\CharArrayWriter
          write(int) 一个字符
          write(char[]) 一个字符数组
          write(char[],offset,len) 一个字符数组的一部分
          write(string,offset,len) 一个字符串或者它的一部分
         
        - OutputStream
          write(int) 一个字节
          write(byte[]) 一个字节数组
          write(byte[],offset,len) 一个字节数组的一部分
         
        - DataOutputStream
          在一个OutputStream的基础上提供以下功能
          writeInt(int) 把一个int型数据按照字节输出。100 --> 0x 00 00 00 64
          writeLong(long) 把一个long型数据按照字节输出。
       
        - PrintStream
          首先它继承自OutputStream,是一个字节流
          其次它以字符形式进行输出。也就是说它会自动按照指定的编码把字节中的数据转换为字符,然后进行输出。集合了转换和缓冲输出的功能,参考上面的构造函数
          最后它主要是提供了许多格式化输出功能
          write(int) 字节输出 100 --> 64
          write(byte[],offset,len) // 字节输出
          write(char[]) 字符输出
          write(string) BufferedWriter 字符输出
          print(...) 字符输出 100 --> 100
          println(...) 字符输出 ‘\r\n‘
          printf(format,...) 字符输出
         
        - PrintWriter
          它的方法和PrintStream相同。
          关于换行符,在windows下是\r\n, 而在linux下是\n,
          他们的用法基本相同

          public class TestIO {

 public static void main(String[] args) {
  String filename = "D:" + File.separator + "hello.txt";
  
  File file = new File(filename);
  
  
  try {
   FileOutputStream fout = new FileOutputStream(file);
   
   PrintStream prt = new PrintStream(fout);
   
   prt.write(100); // 文件中内容为64
   
   prt.close();
   fout.close();
   
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }
}       
 
       Print 流通常用于标准输出和标准错误,他们默认都是在显示器上进行输出。我们可以更改他们输出到文件,这就是输出重定向,或者叫做标准输出重定向
        System.out 标准输出流
        System.err 标准错误流
       
        System.setErr()
        System.setOut()
        Test Code:
 




本文出自 “技术生活” 博客,请务必保留此出处http://6621180.blog.51cto.com/6611180/1922788

java Print流 和 重定向