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 }