Android開發(fā)進(jìn)階:如何讀寫Android文件
51CTO編者按:Android主要有四大主要組件組成:Activity、ContentProvider、Service、Intent組成。Android文件的運(yùn)行主要需要讀寫四大組件的文件。本文將介紹如何讀寫Android文件,希望對(duì)正在進(jìn)行Android開發(fā)的朋友有所幫助。
51CTO推薦閱讀:Android開發(fā)應(yīng)用詳解
文件存放位置
在Android中文件的I/O是存放在/data/data/<package name>/file/filename目錄下。
提示:Android是基于linux系統(tǒng)的,在linux的文件系統(tǒng)中不存在類似于Windows的磁盤分區(qū)現(xiàn)象,其是以一個(gè)正斜杠“/”開頭。
Android中得到輸入輸出流
在Android中,對(duì)于流的操作十分簡(jiǎn)單。在Context類中有如下兩個(gè)方法可以直接得到文件輸入輸出流:
- public FileInputStream openFileInput (String name)
- public FileOutputStream openFileOutput (String name, int mode)
顧名思義,通過如上方法就可以得到文件輸入輸出流。對(duì)于第二個(gè)方法中的mode,有如下四種模式:
◆Use 0 or MODE_PRIVATE( the default operation) :用0表示默認(rèn)值,只能夠創(chuàng)建文件的應(yīng)用程序訪問該文件,每次文件寫入為覆蓋方式。
◆MODE_APPEND to append to an existing file: 每次文件寫入為追加方式,類似于StringBuffer中的append()方法。
◆MODE_WORLD_READABLE :只有讀權(quán)限。
◆MODE_WORLD_WRITEABLE :只有寫權(quán)限。
提示:如果想同時(shí)得到讀與寫的權(quán)限,則可以在mode處通過如下方式創(chuàng)建:
- MODE_WORLD_READABLE+ MODE_WORLD_WRITEABLE
對(duì)于Java SE部分的補(bǔ)充
FileOutputStream:
public void write(byte[] b) throws IOException 該方法可將指定的字節(jié)數(shù)組寫入文件輸出流
FileInputStream:
public int read(byte[] b) throws IOException 從此輸入流中將最多 b.length 個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中。在某些輸入可用之前,此方法將阻塞。
對(duì)于輸出流直接使用write方法即可,可參考如下代碼:
Java代碼
- <span style="white-space: pre;"> </span>/**
- * 寫入數(shù)據(jù)
- * @param fs
- * @param content
- */
- public void fileWrite(FileOutputStream fos,String content){
- byte[] contentcontentByteArray = content.getBytes();
- try {
- fos.write(contentByteArray);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- try {//關(guān)閉流
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
對(duì)于輸入流,出于性能考慮,可先使用ByteArrayOutputStream,向內(nèi)存中創(chuàng)建一個(gè)字符數(shù)組,當(dāng)將文件讀完后,在讀入,參考如下代碼:
Java代碼
- * 讀數(shù)據(jù)
- * @param fis
- * @return
- */
- public String fileRead(FileInputStream fis){
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int len = -1;
- try {
- while((len=(fis.read(buffer))) != -1){
- baos.write(buffer,0,len);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- String result = new String(baos.toByteArray());
- //System.out.println(result);
- try {
- baos.close();
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return result;
- }
ByteArrayOutputStream:此類實(shí)現(xiàn)了一個(gè)輸出流,其中的數(shù)據(jù)被寫入一個(gè) byte 數(shù)組。
public void write(byte[] b,int off,int len) 將指定 byte 數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此 byte 數(shù)組輸出流。
可參考代碼:FileIO 代碼下載
【編輯推薦】