Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android 內部文件讀取

android 內部文件讀取

編輯:關於android開發

android 內部文件讀取


Android 文件管理方法
Android使用的是基於Linux的文件系統,對於文件的訪問和管理是通過權限設置來限制的.
在Linux系統中,文件權限分別描述了創建者、同組用戶和其他用戶對文件的操作限制。
x表示可執行,r表示可讀,w表示可寫,d表示目錄,-表示普通文件。
產生這樣的文件權限與程序人員設定的
Android 存儲文件的類型
(內部存儲)程序開發人員可以建立和訪問程序自身的私有文件;
(資源存儲)可以訪問保存在資源目錄中的原始文件和XML文件;
(外部存儲)可以在SD卡等外部存儲設備中保存文件

Android系統允許應用程序創建僅能夠自身訪問的私有文件,文件保存在設備的內部存儲器上,在Linux系統下的/data/data//files目錄中
Android系統不僅支持標准Java的IO類和方法,還提供了能夠簡化讀寫流式文件過程的函數
FileOutputStream openFileOutput(String filename int mode)
FileInputStream openFileInput(String filename)
參數文件不允許包含描述路徑的斜槓(其存儲位置固定)
訪問模式:

MODE_PRIVATE私有模式,缺陷模式,文件僅能夠被文件創建程序訪問,或具有相同UID的程序訪問。
MODE_APPEND追加模式,如果文件已經存在,則在文件的結尾處添加新數據。
MODE_WORLD_READABLE全局讀模式,允許任何程序讀取私有文件。
MODE_WORLD_WRITEABLE全局寫模式,允許任何程序寫入私有文件。

三個基本的讀方法

abstract int read() :讀取一個字節數據,並返回讀到的數據,如果返回-1,表示讀到了輸入流的末尾。
int read(byte[]b) :將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。
int read(byte[]b, intoff, intlen) :將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。off指定在數組b中存放數據的起始偏移位置;len指定讀取的最大字節數。
其它方法
long skip(longn) :在輸入流中跳過n個字節,並返回實際跳過的字節數。
int available() :返回在不發生阻塞的情況下,可讀取的字節數。
void close() :關閉輸入流,釋放和這個流相關的系統資源。
void mark(intreadlimit) :在輸入流的當前位置放置一個標記,如果讀取的字節數多於readlimit設置的值,則流忽略這個標記。
void reset() :返回到上一個標記。
boolean markSupported() :測試當前流是否支持mark和reset方法。如果支持,返回true,否則返回false。

三個基本的寫方法

abstract void write(intb) :往輸出流中寫入一個字節。
void write(byte[]b) :往輸出流中寫入數組b中的所有字節。
void write(byte[]b, intoff, intlen) :往輸出流中寫入數組b中從偏移量off開始的len個字節的數據。
其它方法
void flush() :刷新輸出流,強制緩沖區中的輸出字節被寫出。
void close() :關閉輸出流,釋放和這個流相關的系統資源。

對文件和流的操作容易引發異常,所以必須要用try-catch語句

主要核心代碼

首先是新建一個文件
private final String FILE_NAME = "Myfile01.txt";
寫文件
FileOutputStream fos = null;//聲明一個全局變量
//注意下面的語句要進行拋異常處理FileNotFoundException e,IOException e
fos = openFileOutput(FILE_NAME,Context.MODE_PRIVATE);//寫流式文件過程的

函數,這裡的權限是私有的
String text = entryText.getText().toString();//把輸入的內容轉化為字符串
fos.write(text.getBytes());//把轉化為字符串的內容轉化為字節,然後寫入
//下面語句寫在finally裡面
fos.flush();//把緩存裡的內容寫入到文件
fos.close();//關閉流

讀文件

FileInputStream fis = null;//定義一個全局變量
fis = openFileInput(FILE_NAME);//打開要讀取的文件
if (fis.available() == 0){//判斷文件是否為空,為空就直接返回
 return;
}
byte[] readBytes = new byte[fis.available()];//把文件裡的內容轉化為字節
while(fis.read(readBytes) != -1){//讀文件,直到讀到最後
}
String text = new String(readBytes);//把讀到的字節轉化為字符串
讀文件的第二種方法
String path = "/data/data/cn.itcast.file/files/writeable.txt";//得到文件路徑
  File file = new File(path);//創建一個文件對象
  FileInputStream inStream = new FileInputStream(file);//讀文件
  byte[] buffer = new byte[1024];//緩存
  int len = 0;
  ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  while( (len = inStream.read(buffer))!= -1){//直到讀到文件結束
   outStream.write(buffer, 0, len);
  }
  byte[] data = outStream.toByteArray();//得到文件的二進制數據
  outStream.close();
  inStream.close();
  Log.i(TAG, new String(data));

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