10.1-全棧Java筆記:最全面的IO技術(一)
IO技術
對於任何程序設計語言而言,輸入輸出(Input/Output)系統都是非常核心的功能。程序運行需要數據,數據的獲取往往需要跟外部系統進行通信,外部系統可能是文件、數據庫、其他程序、網絡、IO設備等等。
外部系統比較復雜多變,那麽我們有必要通過某種手段進行抽象、屏蔽外部的差異,從而實現更加便捷的編程。
輸入(Input)指的是:可以讓程序從外部系統獲得數據(核心含義是“讀”,讀取外部數據)。常見的應用:
1) 讀取硬盤上的文件內容到程序。例如:播放器打開一個視頻文件、word打開一個doc文件。
2) 讀取網絡上某個位置內容到程序。例如:瀏覽器中輸入網址後,打開該網址對應的網頁內容;下載網絡上某個網址的文件。
3) 讀取數據庫系統的數據到程序。
4) 讀取某些硬件系統數據到程序。例如:車載電腦讀取雷達掃描信息到程序;溫控系統
輸出(Output)指的是:程序輸出數據給外部系統從而可以操作外部系統(核心含義是“寫”,將數據寫出到外部系統)。常見的應用有:
5) 將數據寫到硬盤中。 例如:我們編輯完一個word文檔後,將內容寫到硬盤上進行保存。
6) 將數據寫到數據庫系統中。例如:我們註冊一個網站會員,實際就是後臺程序向數據庫中寫入一條記錄。
7)將數據寫到某些硬件系統中。例如:導彈系統導航程序將新的路徑輸出到飛控子系統,飛控子系統根據數據修正飛行路徑。
java.io包為我們提供了相關的API,實現了對所有外部系統的輸入輸出操作,這就是我們這章所要學習的技術。
基本概念和IO入門
數據源
數據源data source,提供數據的原始媒介。
常見的:數據庫、文件、其他程序、內存、網絡連接、IO設備。
數據源分為:源設備、目標設備。
源設備:為程序提供數據,一般對應輸入流。
目標設備:程序數據的目的地,一般對應輸出流。
流的概念
數據源就像水箱,流(stream)就像水管中流著的水流,程序就是我們最終的用戶。 流是一個抽象、動態的概念,是一連串連續動態的數據集合。
圖1 流與源數據源和目標數據源之間的關系
第一個簡單的IO流程序及深入
當程序需要讀取數據源的數據時,就會通過IO流對象開啟一個通向數據源的流,通過這個IO流對象相關方法可以順序讀取流中的數據。
【示例1】 通過流對象從一個文件中讀取數據
import java.io.*;
public class Demo01 { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("d:/a.txt"); //文件內容是:abc int s1 = fis.read(); //打印輸入字符a對應的ascii碼值97 int s2 = fis.read(); //打印輸入字符a對應的ascii碼值98 int s3 = fis.read(); //打印輸入字符a對應的ascii碼值99 int s4 = fis.read(); //由於文件內容已經讀取完畢,返回-1 System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println(s4);
fis.close(); //流對象使用完,必須關閉!不然,總占用系統資源,最終會造成系統崩潰! } catch (Exception e) { e.printStackTrace(); } } } |
【示例2】通過流對象從一個文件中讀取數據(經典代碼,一定要掌握)
import java.io.*;
public class Demo02 { public static void main(String[] args) { FileInputStream fis =null; try { fis = new FileInputStream("d:/a.txt"); //內容是:abc StringBuilder sb = new StringBuilder(); int temp = 0; while((temp=fis.read())!=-1){ sb.append((char)temp); } System.out.println(sb); } catch (Exception e) { e.printStackTrace(); }finally{ try{ if(fis!=null){ fis.close(); //流對象,使用完後必須關閉!!這種寫法,保證了即使遇到異常情況,也會關閉流對象。 } }catch(IOException e){ e.printStackTrace(); } } } } |
老鳥建議:
如上代碼是一段非常典型的IO流代碼,其他流對象的使用也基本是同樣的模式!
本節我們先講到這裏,下節我們繼續聊~~
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數據庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰
E-Java高級框架精解
F-Linux和Hadoop
本文出自 “12931675” 博客,請務必保留此出處http://12941675.blog.51cto.com/12931675/1943928
10.1-全棧Java筆記:最全面的IO技術(一)