日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Android數據存儲之文件存儲

系統 2165 0

首先給大家介紹使用文件如何對數據進行存儲,Activity提供了openFileOutput()方法可以用于把數據輸出到文件中,具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。

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()方法的第一參數用于指定文件名稱,不能包含路徑分隔符“/” ,如果文件不存在,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()方法的第二參數用于指定操作模式,有四種模式,分別為: Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
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 ,只有這樣其他程序才能正確訪問。


讀取文件內容

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 ;
}
}

對于私有文件只能被創建該文件的應用訪問,如果希望文件能被其他應用讀和寫,可以在創建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權限。
Activity還提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于獲取/data/data/<package name>/cache目錄
getFilesDir()方法用于獲取/data/data/<package name>/files目錄

把文件放入SD卡

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

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

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

mksdcard 2048M D:\AndroidTool\sdcard.img

在程序中訪問SDCard,你需要申請訪問SDCard的權限。

在AndroidManifest.xml中加入訪問SDCard的權限如下:

<!-- 在SDCard中創建與刪除文件權限 -->

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

<!-- 往SDCard寫入數據權限 -->

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

要往SDCard存放文件,程序必須先判斷手機是否裝有SDCard,并且可以進行讀寫。

注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的權限

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的狀態,如果手機裝有SDCard,并且可以進行讀寫,那么方法返回的狀態等于Environment.MEDIA_MOUNTED。

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

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數據存儲之文件存儲


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 丹巴县| 南郑县| 莲花县| 来宾市| 桐庐县| 淮滨县| 县级市| 广西| 兴隆县| 望奎县| 江都市| 大石桥市| 巢湖市| 巍山| 合江县| 新安县| 永清县| 怀仁县| 日土县| 博罗县| 泸州市| 富宁县| 包头市| 潜江市| 鄂尔多斯市| 方城县| 台北县| 永清县| 呼伦贝尔市| 铁岭市| 建瓯市| 汶川县| 北流市| 富宁县| 拉萨市| 石柱| 怀柔区| 历史| 景洪市| 万全县| 治县。|