< Android数据存储> 任务二 应用程序数据文件夹里的文件读写
:zh]Android中提供了兩個方法用來打開應用程序的數據文件夾IO流。
1.FileInputStream openFileInput(String name):參數name表示某個文件名,該方法用于打開應用程序文件夾下name文件對應的輸入流。
2.FileOutputStream openFileOutPut(String name,int mode):該方法用于打開應用程序的文件夾下name文件對應的輸出流。
同時,Android中提供了如下方法用來對應用程序的文件夾進行操作。
1.getDir(String name,int mode):用于創建name對應的子目錄。
2.File getFilesDir():獲取絕對路徑。
3.Stirng[] fileList():返回文件夾下所有文件。
4.deleteFile(String name):刪除指定文件。
關于文件存儲,Activity提供了openFileOutput()方法可以用于把數據輸出到文件中,具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。
文件可用來存放大量數據,如文本、圖片、音頻等。
默認位置:/data/data/<包>/files/***.***。
public void write() { try { FileOutputStream outStream=this.openFileOutput("sict.txt",Context.MODE_WORLD_READABLE); outStream.write(text.getText().toString().getBytes()); outStream.close(); Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { return; } catch (IOException e){ return ; } }openFileOutput()方法的第一參數用于指定文件名稱,不能包含路徑分隔符“/”,如果文件不存在,Android?會自動創建它。
創建的文件保存在/data/data/<package name>/files目錄,如:?/data/data/cn.itcast.action/files/itcast.txt?,依次選擇Eclipse菜單“WindowàShow ViewàOther”,在對話窗口中展開android文件夾,選擇下面的File Explorer視圖,然后在File Explorer視圖中展開/data/data/<package name>/files目錄就可以看到該文件。
openFileOutput()方法的第二參數用于指定操作模式,有四種模式。
1.Context.MODE_PRIVATE = 0
2.Context.MODE_APPEND = 32768
3.Context.MODE_WORLD_READABLE = 1
4.Context.MODE_WORLD_WRITEABLE = 2
其中,Context.MODE_PRIVATE為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中,可以使用Context.MODE_APPEND。Context.MODE_APPEND模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有權限讀寫該文件。MODE_WORLD_READABLE表示當前文件可以被其他應用讀取,MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
如果希望文件被其他應用讀和寫,可以傳入:?openFileOutput("itcast.txt",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,當應用程序(.apk)在安裝時系統就會分配給他一個userid,當該應用要去訪問其他資源比如文件的時候,就需要userid匹配。默認情況下,任何應用創建的文件,sharedpreferences,數據庫都應該是私有的(位于/data/data/<package name>/files),其他程序無法訪問。
除非在創建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE?,只有這樣其他程序才能正確訪問。
二 、對于私有文件只能被創建該文件的應用訪問,如果希望文件能被其他應用讀和寫,可以在創建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權限。??
Activity還提供了getCacheDir()和getFilesDir()方法:?getCacheDir()方法用于獲取/data/data/<package name>/cache目錄?getFilesDir()方法用于獲取/data/data/<package name>/files目錄。
public void read() { try { FileInputStream inStream=this.openFileInput("sict.txt"); ByteArrayOutputStream stream=new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int length=-1; while((length=inStream.read(buffer))!=-1) { stream.write(buffer,0,length); } stream.close(); inStream.close(); text.setText(stream.toString()); Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e){ return ; } }三 、文字填空題
(1 滿分)
根據注釋后的內容填寫適當的代碼
String FILE_NAME = "file.txt";——————————————————- //使用openFileOutput()函數以私有模式建立文件String text = “data”;fs.write(text.getBytes());fo.flush();fo.close(); ANSWER:FileOutputStream fo=openFileOutput(FILE_NAME, 0);四、文字填空題?(1 滿分)
根據注釋后的內容填寫適當的代碼
String FILE_NAME = "file.txt";———————————————— //使用openFileInput()函數打開已有文件byte[] readBytes = new byte[fi.available()];while(fi.read(readBytes) != -1){} ANSWER:FileInputStream fi=openFileInput(FILE_NAME);五、實戰視頻、代碼
相關Java代碼
/*** 向文件中寫入內容*/try {FileOutputStream fileOutputStream =openFileOutput(FILE_NAME,0);if (et_write.getText().toString().trim().length()!=0){fileOutputStream.write(et_write.getText().toString().getBytes());}fileOutputStream.close();Toast.makeText(getApplicationContext(),"寫入成功",Toast.LENGTH_SHORT).show();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} /*** 讀取文件中的內容* By auther CYJ 2018-01-22*/try {FileInputStream fileInputStream=openFileInput(FILE_NAME);ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int length=-1;while((length=fileInputStream.read(buffer))!=-1){byteArrayOutputStream.write(buffer,0,length);}byteArrayOutputStream.close();fileInputStream.close();et_read.setText(byteArrayOutputStream.toString());Toast.makeText(getApplicationContext(),"讀取成功",Toast.LENGTH_SHORT).show();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}六?源碼鏈接
往期鏈接:<Android界面編程>? 任務一 ??醬油詩詞賞析?
??<Android界面編程>? 任務二用戶注冊界面
? ? ? ? ? ? ??
?<5 Android數據存儲> 任務二 應用程序數據文件夾里的文件讀寫 , - X+Y - CSDN博客
??
總結
以上是生活随笔為你收集整理的< Android数据存储> 任务二 应用程序数据文件夹里的文件读写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Python增强Excel的3大集成方
- 下一篇: 推荐程序员的求爱技巧