Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發入門:I/O流使用介紹(上)

Android開發入門:I/O流使用介紹(上)

編輯:Android開發實例

在寫Android的數據存儲之前,想溫故下Core Java中的I/O流。一是為鞏固基礎,二是為更好掌握Android的數據存儲打基礎!

  IO:即輸入,輸出。學IO:

  • 先學好一個包: java.io.*。
  • 學java.io.*包之前,先要明白:流的概念。
  • 理解了‘流’之後就要區分字節流與字符流。
  • 當以上都理解之後,就可以去練習相關的類。 
  • 當相關的類掌握之後,就去學習序列化。
  • 當以上知識點都學習並且掌握之後,就可以去學習如何使用NIO.

這是大致的學習路線圖,另外補充一點,NIO我也不太熟悉,相關筆記以後在補上!

java.io.*總共有86個類(如果沒有算錯的話),不建議每個類或接口都掌握,學習的目的是用於生產,所以掌握能干活的並且經常使用的類即可,我主張學於致用!

關於流的思考:

  我們見過河流,相信不少人還在其中嬉戲打鬧游泳過。我喜歡河流,並且在其中裸泳是件很美妙的事情。河流通常都會有源頭並且大多位海拔較高或者相當的高區位,河流的終點往往是某大型湖泊或海洋,它流動的趨勢是從高向底,彎曲游走;它是動態的,是變化的!我們可以抽象些講: 是按一定規律運動的;再抽象點:是自然界中脈絡相通的排洩降水徑流的天然輸水通道;再再抽象點:河流是通道,是按某種軌跡運動變化的水的抽象!當淤泥過多時,它會阻塞膨脹;當大壩築起後,它可以蓄水防洪。它的載體是大地。

  • 輸入流:海拔較高或者相當的高區位
  • 輸出流:某大型湖泊或海洋
  • 中間層:是水的通道

  講河流與IO有什麼關系呢? 有個概念抽象的關系。IO中流是對有序數據抽象。那有序數據就好比是水,它的輸入不在是高海拔的山區而是鍵盤,鼠標等設備,它的輸出不在是湖泊與海洋而是文件或屏幕;水是變化動態的,有序的數據也是變化,動態的。IO會阻塞,也有緩存,java中的IO與平台無關,它的載體是操作系統。這就是相關性,也是我的感悟;不一定最好,只是可以通過生活中的事物進行聯想理解而以。

  • 輸入流:鍵盤,鼠標等設備
  • 輸出流:文件或屏幕
  • 中間層:數據通道

 總結下: 流: 英譯stream:

  1.  "一頭一口":源頭與出口,即輸入與輸出;
  2. 是有序且變化著的;
  3. 有阻塞,有緩存;
  4. 不理會大地與平台,專注與它的實現。

我們回到具體的實現中來:數據從服務器通過網絡流向客戶端,我們稱Server端的程序為輸出流(把數據輸出到網絡),Client端內存負責從網絡裡讀取數據,稱之為:輸入流。

  • 輸入流: 讀取數據;
  • 輸出流:寫入數據;
  • 中間層:網絡數據通道;

因此我們就能很好的以中間層為軸判斷輸入流與輸出流了!eg:網絡從Server端讀取數據然後向Client中寫入數據! 

字節流與字符流:它們之的區別就在於數據單元不同而以;字節流操作的數據單元是8位的字節,而字符流操作的數據單元是16位的字節。

  •  File

  File與內容無關,它是文件本質上抽象並且包含一系列與文件相關的方法。

  1. 與文件名相關:String getName(),String getParent(),String getAbsolutePath()
  2. 檢測文件:boolean isAbsolute(), boolean exists(),boolean isDirectory(),boolean isFile()  大多是is系列方法
  3. 文件及目錄操作:boolean mkdir(),String[] list(),File[] listFiles(),boolean createNewFile(),boolean delete(),void deleteOnExit()在Android調用此方法應當注意,具體原因請查閱文檔,它比我解釋的更好: http://developer.android.com/reference/java/io/File.html#deleteOnExit()

下面給出三段代碼:各位也可以試驗一下並觀察它們的區別,親自試驗之後,會有不一樣的收獲:

  1. static void demo1(String pathname) {  
  2.          File file = new File(pathname);  
  3.          // System.out.println("return : " + file.isFile());  
  4.          if (file.isDirectory()) {  
  5.              String[] temp = file.list();  
  6.              for (int i = 0; i < temp.length; i++) {  
  7.                  File flag = new File(pathname, temp[i]);  
  8.                  if (flag.isDirectory()) {  
  9.                      demo1(flag.getPath());  
  10.                  }  
  11.                  System.out.println(flag);  
  12.    
  13.              }  
  14.          }  
  15.      }  
  1. static void demo2(String pathname) {  
  2.          File file = new File(pathname);  
  3.          // System.out.println("return : " + file.isDirectory());  
  4.          if (file.isDirectory()) {  
  5.              File[] temp = file.listFiles();  
  6.              File flag = null;  
  7.              for (int i = 0; i < temp.length; i++) {  
  8.                  flag = temp[i];  
  9.                  if (flag.isDirectory()) {  
  10.                      demo2(flag.getPath());  
  11.                  }  
  12.                  // else{  
  13.                  System.out.println(flag);  
  14.                  // }  
  15.    
  16.              }  
  17.          }  
  18.    
  19.      }  
  1. static void demo3(String pathname) {  
  2.          File file = new File(pathname);  
  3.          // System.out.println("return : " + file.isFile());  
  4.          if (file.isDirectory()) {  
  5.              String[] temp = file.list();  
  6.              for (int i = 0; i < temp.length; i++) {  
  7.                  File flag = new File(temp[i]);  
  8.                  if (flag.isDirectory()) {  
  9.                      demo3(flag.getPath());  
  10.                  }  
  11.                  System.out.println(flag);  
  12.    
  13.              }  
  14.          }  
  15.      } 

main方法:

 

  1. public static void main(String[] args) {  
  2.          long num = System.currentTimeMillis();  
  3.          demo1(".");  
  4.          demo2(".");  
  5.          demo3(".");  
  6.          System.out.println(System.currentTimeMillis() - num);  
  7.      } 

核心是:list()與listFiles()的操作。

另外在list系列方法有個“文件過濾器”接口:FilenameFilter ,其中有個accept方法;如果要過濾某個文件,把過濾條件寫在accept中既可;Easy!!

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved