5 Android数据存储 任务二 应用程序数据文件夹里的文件读写 ,
Android中提供了兩個(gè)方法用來打開應(yīng)用程序的數(shù)據(jù)文件夾IO流。
1.FileInputStream openFileInput(String name):參數(shù)name表示某個(gè)文件名,該方法用于打開應(yīng)用程序文件夾下name文件對(duì)應(yīng)的輸入流。
2.FileOutputStream openFileOutPut(String name,int mode):該方法用于打開應(yīng)用程序的文件夾下name文件對(duì)應(yīng)的輸出流。
同時(shí),Android中提供了如下方法用來對(duì)應(yīng)用程序的文件夾進(jìn)行操作。
1.getDir(String name,int mode):用于創(chuàng)建name對(duì)應(yīng)的子目錄。
2.File getFilesDir():獲取絕對(duì)路徑。
3.Stirng[] fileList():返回文件夾下所有文件。
4.deleteFile(String name):刪除指定文件。
關(guān)于文件存儲(chǔ),Activity提供了openFileOutput()方法可以用于把數(shù)據(jù)輸出到文件中,具體的實(shí)現(xiàn)過程與在J2SE環(huán)境中保存數(shù)據(jù)到文件中是一樣的。
文件可用來存放大量數(shù)據(jù),如文本、圖片、音頻等。
默認(rèn)位置:/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()方法的第一參數(shù)用于指定文件名稱,不能包含路徑分隔符“/”,如果文件不存在,Android?會(huì)自動(dòng)創(chuàng)建它。
創(chuàng)建的文件保存在/data/data/<package name>/files目錄,如:?/data/data/cn.itcast.action/files/itcast.txt?,依次選擇Eclipse菜單“WindowàShow ViewàOther”,在對(duì)話窗口中展開android文件夾,選擇下面的File Explorer視圖,然后在File Explorer視圖中展開/data/data/<package name>/files目錄就可以看到該文件。
openFileOutput()方法的第二參數(shù)用于指定操作模式,有四種模式。
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為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在該模式下,寫入的內(nèi)容會(huì)覆蓋原文件的內(nèi)容,如果想把新寫入的內(nèi)容追加到原文件中,可以使用Context.MODE_APPEND。Context.MODE_APPEND模式會(huì)檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件。Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應(yīng)用是否有權(quán)限讀寫該文件。MODE_WORLD_READABLE表示當(dāng)前文件可以被其他應(yīng)用讀取,MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入。
如果希望文件被其他應(yīng)用讀和寫,可以傳入:?openFileOutput("itcast.txt",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,當(dāng)應(yīng)用程序(.apk)在安裝時(shí)系統(tǒng)就會(huì)分配給他一個(gè)userid,當(dāng)該應(yīng)用要去訪問其他資源比如文件的時(shí)候,就需要userid匹配。默認(rèn)情況下,任何應(yīng)用創(chuàng)建的文件,sharedpreferences,數(shù)據(jù)庫都應(yīng)該是私有的(位于/data/data/<package name>/files),其他程序無法訪問。
?
除非在創(chuàng)建時(shí)指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE?,只有這樣其他程序才能正確訪問。
二 、對(duì)于私有文件只能被創(chuàng)建該文件的應(yīng)用訪問,如果希望文件能被其他應(yīng)用讀和寫,可以在創(chuàng)建文件時(shí),指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。??
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 滿分)根據(jù)注釋后的內(nèi)容填寫適當(dāng)?shù)拇a
String FILE_NAME = "file.txt";——————————————————- //使用openFileOutput()函數(shù)以私有模式建立文件String text = “data”;fs.write(text.getBytes());fo.flush();fo.close(); ANSWER:FileOutputStream fo=openFileOutput(FILE_NAME, 0);四、文字填空題?(1 滿分)根據(jù)注釋后的內(nèi)容填寫適當(dāng)?shù)拇a
String FILE_NAME = "file.txt";———————————————— //使用openFileInput()函數(shù)打開已有文件byte[] readBytes = new byte[fi.available()];while(fi.read(readBytes) != -1){} ANSWER:FileInputStream fi=openFileInput(FILE_NAME);五、實(shí)戰(zhàn)視頻、代碼相關(guān)Java代碼 /*** 向文件中寫入內(nèi)容*/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();} /*** 讀取文件中的內(nèi)容* 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界面編程>? 任務(wù)一 ??醬油詩詞賞析?
??<Android界面編程>? 任務(wù)二用戶注冊(cè)界面? ? ? ? ? ? ?<5 Android數(shù)據(jù)存儲(chǔ)> 任務(wù)二 應(yīng)用程序數(shù)據(jù)文件夾里的文件讀寫 , - X+Y - CSDN博客?
??
?
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的5 Android数据存储 任务二 应用程序数据文件夹里的文件读写 ,的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员山洞开发程序,两年敲45万行代码,
- 下一篇: 02ODBC基本概念