java标准输入输出流

java标准输入输出流

System 类   public final class System extends Object

包含一些有用的类字段和方法。它不能被实例化。

System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

static PrintStream err “标准”错误输出流。
static InputStream in  “标准”输入流。
static PrintStream out “标准”输出流。

public static final InputStream in:字节输入流,用来读取键盘录入的数据 

  例:InputStream is=System.in;

    Scanner sc=new Scanner(System.in);

public static final PrintStream out:字节输出流,将数据输出到命令行

  例:System.out.print();

1、读取磁盘录入的数据,并写到根目录下a.txt文件中

 1 import java.io.FileWriter;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.io.InputStreamReader;
 5 import java.io.Reader;
 6 
 7 /**
 8  * 转换流:把字节输入流转换成字符输入流 InputStreamReader
 9  *                     InputStreamReader(InputStream in)
10  * @author Administrator
11  *
12  */
13 public class InputStreamWriterDemo {
14     public static void main(String[] args) throws IOException {
15         //创建输入流对象
16         InputStream is=System.in;
17         
18         /*
19         //创建输出流对象
20         FileWriter fw=new FileWriter("a.txt");
21         //读写
22         byte[] bys=new byte[1024];
23         int len=0;
24         while((len=is.read(bys))!=-1) {
25             fw.write(new String(bys, 0, len));
26         }
27          */
28         Reader r=new InputStreamReader(is);
29         FileWriter fw=new FileWriter("a.txt");
30         char[] chs=new char[1024];
31         int len=0;
32         while((len=r.read(chs))!=-1) {
33             fw.write(chs,0,len);
34             fw.flush();
35         }
36         
37         //释放资源
38         fw.close();
39         is.close();
40     }
41 }

2、将文件数据打印到命令行

 3 import java.io.BufferedReader;
 4 import java.io.FileReader;
 5 import java.io.IOException;
 6 import java.io.OutputStream;
 7 
 8 //需求:读取项目根目录下SystemInOutDemo.java,并输出到命令行
 9 public class SystemInOutDemo {
10     public static void main(String[] args) throws IOException {
11         //创建输入输出流对象
12         BufferedReader br=new BufferedReader(new FileReader("SystemInOutDemo.java"));
13         OutputStream os=System.out;
14         
15         String line;//用于存储读取到的数据
16         while((line=br.readLine())!=null) {
17             os.write(line.getBytes());
18             os.write("
".getBytes());
19         }
20         //释放资源
21         os.close();
22         br.close();
23         
24     }
25 }

由于标准输出流是一个字节输出流,所以只能输出字节或者字节数组,但是我们读到的数据则是字符串,如果想进行输出,还需要转换成字节数组,非常麻烦。我们要想通过标准输出流输出字符串,把标准输出流转换成一种字符输出流即可。可以使用转换流OutputStreamWriter。

 1 import java.io.BufferedReader;
 2 import java.io.FileReader;
 3 import java.io.IOException;
 4 import java.io.OutputStreamWriter;
 5 import java.io.Writer;
 6 
 7 //需求:读取项目根目录下SystemInOutDemo.java,并输出到命令行
 8 public class SystemInOutDemo {
 9     public static void main(String[] args) throws IOException {
10         //创建输入输出流对象
11         BufferedReader br=new BufferedReader(new FileReader("SystemInOutDemo.java"));
12         Writer w=new OutputStreamWriter(System.out);//多态,父类引用指向子类对象
13         //进行数据读写
14         String line;
15         while((line=br.readLine())!=null) {
16             w.write(line);
17             w.write("
");
18         }
19         //释放资源
20         w.close();
21         br.close();
22     }
23 }

还可以结合高效缓冲流使用:

 1 import java.io.BufferedReader;
 2 import java.io.BufferedWriter;
 3 import java.io.FileReader;
 4 import java.io.IOException;
 5 import java.io.OutputStreamWriter;
 6 
 7 //需求:读取项目根目录下SystemInOutDemo.java,并输出到命令行
 8 public class SystemInOutDemo {
 9     public static void main(String[] args) throws IOException {
10         //创建输入输出流对象
11         BufferedReader br=new BufferedReader(new FileReader("SystemInOutDemo.java"));
12         BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
13         //进行数据读写
14         String line;
15         while((line=br.readLine())!=null) {
16             bw.write(line);
17             bw.newLine();
18         }
19         //释放资源
20         bw.close();
21         br.close();
22     }
23 }
原文地址:https://www.cnblogs.com/hopeyes/p/9733655.html