Day28---學習Java第二彈
2021-08-07
Java輸入輸出流
Java中I/O操作主要是指使用Java進行輸入,輸出操作. Java所有的I/O機制都是基於資料流進行輸入輸出,
這些資料流表示了字元或者位元組資料的流動序列。Java的I/O流提供了讀寫資料的標準方法。
任何Java中表示資料來源的物件都會提供以資料流的方式讀寫它的資料的方法。
Java.io是大多數面向資料流的輸入/輸出類的主要軟體包。此外,Java也對塊傳輸提供支援,在核心庫 java.nio中採用的便是塊IO。
流IO的好處是簡單易用,缺點是效率較低。塊IO效率很高,但程式設計比較複雜。
標準輸入輸出,檔案的操作,網路上的資料流,字串流,物件流,zip檔案流等等,java中將輸入輸出抽象稱為流,
就好像水管,將兩個容器連線起來。將資料衝外存中讀取到記憶體中的稱為輸入流,將資料從記憶體寫入外存中的稱為輸出流。
流是一個很形象的概念,當程式需要讀取資料的時候,就會開啟一個通向資料來源的流,這個資料來源可以是檔案,
記憶體,或是網路連線。類似的,當程式需要寫入資料的時候,就會開啟一個通向目的地的流。
1) 資料流:
一組有序,有起點和終點的位元組的資料序列。包括輸入流和輸出流。
2) 輸入流(Input Stream):
程式從輸入流讀取資料來源。資料來源包括外界(鍵盤、檔案、網路…),即是將資料來源讀入到程式的通訊通道
3) 輸出流:
程式向輸出流寫入資料。將程式中的資料輸出到外界(顯示器、印表機、檔案、網路…)的通訊通道。採用資料流的目的就是使得輸出輸入獨立於裝置。
Input Stream不關心資料來源來自何種裝置(鍵盤,檔案,網路)
Output Stream不關心資料的目的是何種裝置(鍵盤,檔案,網路)
4) 資料流分類:
流序列中的資料既可以是未經加工的原始二進位制資料,也可以是經一定編碼處理後符合某種格式規定的特定資料。
因此Java中的流分為兩種:
1) 位元組流:資料流中最小的資料單元是位元組
2) 字元流:資料流中最小的資料單元是字元, Java中的字元是Unicode編碼,一個字元佔用兩個位元組。
public class TestArgs {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "] is <" + args[i] + ">");
}
}
}
執行命令:java Java C VB
執行結果:
args[0] is <Java>
args[1] is <C>
args[2] is <VB>
java系統自帶的標準資料流:java.lang.System:
java.lang.System
public final class System extends Object{
static PrintStream err;//標準錯誤流(輸出)
static InputStream in;//標準輸入(鍵盤輸入流)
static PrintStream out;//標準輸出流(顯示器輸出流)
}
1) 標準輸出流 System.out
System.out向標準輸出裝置輸出資料,其資料型別為PrintStream。方法:
Void print( 引數)
Void println( 引數)
2)標準輸入流 System.in
System.in讀取標準輸入裝置資料(從標準輸入獲取資料,一般是鍵盤),其數 據型別為InputStream。方法:
int read() //返回ASCII碼。若,返回值=-1,說明沒有讀取到任何位元組讀取工作結束。
int read(byte[] b)// 讀入多個位元組到緩衝區b中返回值是讀入的位元組數
例如:
import java.io.*;
public class StandardInputOutput {
public static void main(String args[]) {
int b;
try {
System.out.println("please Input:");
while ((b = System.in.read()) != -1) {
System.out.print((char) b);
}
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
等待鍵盤輸入,鍵盤輸入什麼,就打印出什麼。
3)標準錯誤流
System.err輸出標準錯誤,其資料型別為PrintStream。可查閱API獲得詳細說明。
標準輸出通過System.out呼叫println方法輸出引數並換行,而print方法輸出引數但不換行。println或print方法都
通 過過載實現了輸出基本資料型別的多個方法,包括輸出引數型別為boolean、char、int、long、float和double。
同時,也過載實現 了輸出引數型別為char[]、String和Object的方法。其中,print(Object)
和println(Object)方法在執行時將調 用引數Object的toString方法。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class StandardInputOutput {
public static void main(String args[]) {
String s;
// 建立緩衝區閱讀器從鍵盤逐行讀入資料
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(ir);
System.out.println("Unix系統: ctrl-d 或 ctrl-c 退出"
+ "\nWindows系統: ctrl-z 退出");
try {
// 讀一行資料,並標準輸出至顯示器
s = in.readLine();
// readLine()方法執行時若發生I/O錯誤,將丟擲IOException異常
while (s != null) {
System.out.println("Read: " + s);
s = in.readLine();
}
// 關閉緩衝閱讀器
in.close();
} catch (IOException e) { // Catch any IO exceptions.
e.printStackTrace();
}
}
}
明天經典例題