亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android數(shù)據(jù)存儲(chǔ)之文件存儲(chǔ)

系統(tǒng) 2405 0

首先給大家介紹使用文件如何對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),Activity提供了openFileOutput()方法可以用于把數(shù)據(jù)輸出到文件中,具體的實(shí)現(xiàn)過(guò)程與在J2SE環(huán)境中保存數(shù)據(jù)到文件中是一樣的。

public void save()
{
try {
FileOutputStream outStream=this.openFileOutput("a.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ù)用于指定文件名稱(chēng),不能包含路徑分隔符“/” ,如果文件不存在,Android 會(huì)自動(dòng)創(chuàng)建它。創(chuàng)建的文件保存在/data/data/<package name>/files目錄,如: /data/data/cn.itcast.action/files/itcast.txt ,通過(guò)點(diǎn)擊Eclipse菜單“Window”-“Show View”-“Other”,在對(duì)話窗口中展開(kāi)android文件夾,選擇下面的File Explorer視圖,然后在File Explorer視圖中展開(kāi)/data/data/<package name>/files目錄就可以看到該文件。
openFileOutput()方法的第二參數(shù)用于指定操作模式,有四種模式,分別為: Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問(wèn),在該模式下,寫(xiě)入的內(nèi)容會(huì)覆蓋原文件的內(nèi)容,如果想把新寫(xiě)入的內(nèi)容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式會(huì)檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來(lái)控制其他應(yīng)用是否有權(quán)限讀寫(xiě)該文件。
MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀取;MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫(xiě)入。
如果希望文件被其他應(yīng)用讀和寫(xiě),可以傳入:
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)用要去訪問(wèn)其他資源比如文件的時(shí)候,就需要userid匹配。默認(rèn)情況下,任何應(yīng)用創(chuàng)建的文件,sharedpreferences,數(shù)據(jù)庫(kù)都應(yīng)該是私有的(位于/data/data/<package name>/files),其他程序無(wú)法訪問(wèn)。除非在創(chuàng)建時(shí)指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問(wèn)。


讀取文件內(nèi)容

public void load()
{
try {
FileInputStream inStream=this.openFileInput("a.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 ;
}
}

對(duì)于私有文件只能被創(chuàng)建該文件的應(yīng)用訪問(wèn),如果希望文件能被其他應(yīng)用讀和寫(xiě),可以在創(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目錄

把文件放入SD卡

使用Activity的openFileOutput()方法保存文件,文件是存放在手機(jī)空間上,一般手機(jī)的存儲(chǔ)空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。對(duì)于像視頻這樣的大文件,我們可以把它存放在SDCard。 SDCard是干什么的?你可以把它看作是移動(dòng)硬盤(pán)或U盤(pán)。

在模擬器中使用SDCard,你需要先創(chuàng)建一張SDCard卡(當(dāng)然不是真的SDCard,只是鏡像文件)。創(chuàng)建SDCard可以在Eclipse創(chuàng)建模擬器時(shí)隨同創(chuàng)建,也可以使用DOS命令進(jìn)行創(chuàng)建,如下:

在Dos窗口中進(jìn)入android SDK安裝路徑的tools目錄,輸入以下命令創(chuàng)建一張容量為2G的SDCard,文件后綴可以隨便取,建議使用.img:

mksdcard 2048M D:\AndroidTool\sdcard.img

在程序中訪問(wèn)SDCard,你需要申請(qǐng)?jiān)L問(wèn)SDCard的權(quán)限。

在AndroidManifest.xml中加入訪問(wèn)SDCard的權(quán)限如下:

<!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<!-- 往SDCard寫(xiě)入數(shù)據(jù)權(quán)限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

要往SDCard存放文件,程序必須先判斷手機(jī)是否裝有SDCard,并且可以進(jìn)行讀寫(xiě)。

注意:訪問(wèn)SDCard必須在AndroidManifest.xml中加入訪問(wèn)SDCard的權(quán)限

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard目錄

File saveFile = new File(sdCardDir, “a.txt”);

FileOutputStream outStream = new FileOutputStream(saveFile);

outStream.write("test".getBytes());

outStream.close();

}

Environment.getExternalStorageState()方法用于獲取SDCard的狀態(tài),如果手機(jī)裝有SDCard,并且可以進(jìn)行讀寫(xiě),那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED。

Environment.getExternalStorageDirectory()方法用于獲取SDCard的目錄,當(dāng)然要獲取SDCard的目錄,你也可以這樣寫(xiě):

File sdCardDir = new File("/sdcard"); //獲取SDCard目錄

File saveFile = new File(sdCardDir, "itcast.txt");

//上面兩句代碼可以合成一句: File saveFile = new File("/sdcard/a.txt");

FileOutputStream outStream = new FileOutputStream(saveFile);

outStream.write("test".getBytes());

outStream.close();

device

Android數(shù)據(jù)存儲(chǔ)之文件存儲(chǔ)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲成人看片 | 免费视频福利 | 成人夜色视频在线观看网站 | 欧美精品在线播放 | 久久er国产精品免费观看2 | 亚洲无线码一区在线观看 | 一级毛片免费毛片一级毛片免费 | 欧美激情社区 | 精品中文字幕久久久久久 | 日干夜干天天干 | 欧美色视频日本片高清在线观看 | 亚洲人成伊人成综合网久久久 | 亚洲一区二区欧美日韩 | 国产一级在线视频 | 久久亚洲不卡一区二区 | 欧美亚洲国产成人综合在线 | 亚洲欧美另类在线视频 | 亚洲精品成人456在线播放 | 中文在线视频 | 日本特级爽毛片叫声 | 日本精品久久久中文字幕 | 九色91精品国产网站 | 狠狠色丁香久久婷婷综合_中 | 国产三级黄色录像 | 一级毛片aa| 国产一级持黄大片99久久 | 免费视频成人国产精品网站 | 久久久久久国产精品免费免费 | 中文在线免费不卡视频 | 成人5252色 | 久草国产视频 | 九九这里只有精品视频 | 交专区videossex另类 | 99久久综合久中文字幕 | 免费国产精成人品 | 狠狠色噜狠狠狠狠色综合久 | 色偷偷91久久综合噜噜噜噜 | 日韩一级特黄毛片在线看 | 私人小影院在线 观看 | 亚洲激情网址 | 天天操夜夜 |