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("\r\n".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("\r\n"); 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 }
