IO流入门
目錄
一、I/O的基礎知識
1.流
2.字節流和字符流
(1)字節類流
(2)字符類流
3.預定義流
二、讀取控制臺輸入
1.讀取字符
2.讀取字符串
三、向控制臺寫輸出
1.PrintWriter類
四、讀/寫文件
五、自動關閉流
一、I/O的基礎知識
1.流
Java程序通過流執行I/O,流是一種抽象,要么產生信息,要么使用信息。流通過Java的I/O系統鏈接到物理設備。所有流的行為方式都是相同的,盡管與它們鏈段的物理設備是不同的。因此,可以為任意類型的設備應用相同的I/O流和方法。這意味著可以將許多不同類型的輸入-磁盤文件、鍵盤或網絡socket抽象為輸入流。與之對應,輸出流可以引用控制臺、磁盤文件或網絡連接。
2.字節流和字符流
字節流為處理字節的輸入和輸出提供了方法。
字符流為處理字符的輸入和輸出提供了方法。
在最底層,所有I/O仍然是面向字節的。在某些情況下,字符流比字節流更高效。
(1)字節類流
頂級是兩個抽象類InputSream和OutputStream。
其中最重要的兩個方法是read()和write()
(2)字符類流
頂級是兩個抽象類Reader和Writer。
其中最重要的兩個方法是read()和write()
3.預定義流
System.out引用標準的輸出流,默認情況下是控制臺。
System.in引用標準的輸入流,默認情況下是鍵盤。
System.err引用標準的錯誤流,默認情況下也是控制臺。
System.in是InputStream類型的對象;System.out和System.err是PrintStream類型的對象 ???
二、讀取控制臺輸入
為了獲得與控制臺關聯的基于字符的流,可以在BufferedReader對象中封裝System.in。
BufferedReader(Reader inputReader)
Reader是抽象類,InputStreamReader是它的個具體子類,該類將字節轉換為字符。
InputStreamReader(InputStream inputStream)
1.讀取字符
read();
2.讀取字符串
readLine();
代碼演示:
public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("please input...");//讀取字符/* char ch;do {ch = (char) br.read();System.out.println(ch);} while (ch != 'q');*///讀取字符串String s;do {s = br.readLine();System.out.println(s);} while (!s.equals("end"));} BufferedReader br=new BufferedReader(new InputStreamReader(System.in));System.out.println("please input...(Enter 'end' is to quit");String[] str=new String[100];for(int i=0;i<100;i++){str[i]=br.readLine();if(str[i].equals("end")){break;}}for(int i=0;i<100;i++){if(str[i].equals("end")){break;}System.out.println(str[i]);}}三、向控制臺寫輸出
1.PrintWriter類
對于實際的程序,使用Java向控制臺輸出的推薦方法是通過PrintWriter流。可以使程序國際化更容易。
構造方法:
PrintWriter(OutputStream ops,boolean flushingOn)
flushingOn控制Java是否在每次調用println()方法時刷新輸出流。True為自動刷新。
printWriter支持print()和println()方法。
public static void main(String[] args) {PrintStream ps=new PrintStream(System.out,true);ps.println("hello");int i=1;ps.println(i);ps.println(true);}四、讀/寫文件
對于讀/寫文件,兩個最常用的流是FileInputStream和FileOutputStream,這兩個類創建與文件鏈接的字節流。
FileInputStream(String fileName)
當創建輸入流時,如果文件不存在,就會拋出FileNotFoundException異常。對于輸出流,如果不能打開文件或不能創建文件,也會拋出FileNotFoundException異常。
文件使用完之后必須關閉,使用close()方法完成的。
public static void main(String[] args) {FileInputStream fis= null;try {fis = new FileInputStream(new File("F:/黑馬程序員/資源/閱讀記錄.txt"));int len=0;byte[] bys=new byte[1024];while((len=fis.read(bys))!=-1){System.out.println(new String(bys,0,len));}} catch (IOException e) {e.printStackTrace();} finally {try {if(fis!=null) {fis.close();}} catch (IOException e) {e.printStackTrace();}}}五、自動關閉流
JDK7增加了一個新特性,該特性提供了另外一種管理資源(例如文件流)的方式,這種方式能自動關閉文件。
一般形式為:
? ? ? ? try(resource-specification){
? ? ? ? ? ? //use the resource
? ? ? ? }
resource-specification是用來聲明和初始化資源的文件。該語句包含一個變量聲明,在該聲明中使用將被
管理的對象引用初始化變量。當try代碼塊結束時,自動釋放資源。
只有對于實現了AutoCloseable接口的資源,才能使用帶資源的try語句。java.io包中的所有流都實現了此接口。
注意:
? ? ? ? 1.try語句中聲明的資源被隱式聲明為final;
? ? ? ? 2.如果要在try語句中管理多個資源,在每個資源之間使用分號分割即可。
總結
- 上一篇: JDK新特性之枚举
- 下一篇: java使用集合模拟斗地主洗牌发牌案例