Android的数据存储
?
??? 先說下,Preference,File, DataBase這三種方式分別對應的目錄是/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database 。
?
??? 在Android中通常使用File存儲方式是用Context.openFileOutput(String fileName, int mode)和Context.openFileInput(String fileName)。
?
????Context.openFileOutput(String fileName, int mode)生成的文件自動存儲在/data/data/Package Name/files目錄下,其全路徑是/data/data/Package Name/files/fileName 。注意下,這里的參數fileName不可以包含路徑分割符(如"/")。
?
??? 通常來說,這種方式生成的文件只能在這個apk內訪問。但這個結論是指使用Context.openFileInput(String fileName)的方式。使用這種方式,每個apk只可以訪問自己的/data/data/Package Name/files目錄下的文件,原因很簡單,參數fileName中不可以包含路徑分割符,Android會自動在/data/data/Package Name/files目錄下尋找文件名為fileName的文件。
?
??? 但是如果你直接使用這個File,那么這個File在其它apk中也是可以訪問的,不過要注意在之前調用Context.openFileOutput(String file, int mode)時不要使用缺省的mode:MODE_PRIVATE ,而應該使用MODE_WORLD_READABLE 。使用缺省mode生成的文件的權限是“660”(也就是rw-rw----),而使用后者生成文件的權限是允許運行別的apk訪問的。代碼如下:
????File file = new File("/data/data/Package Name/files/fileName");
?
??? 另外還有一個方法可以改變這個生成文件的權限。可以直接在Java代碼中執行Linux命令,畢竟Android歸根到底也是Linux .代碼如下:
???//?Process process = Runtime.getProcess().exec("chmod 666 /data/data/Package Name/files/fileName");
???//process.waitFor();
?Process process = Runtime.getRuntime().exec ("ls");??????
??????? ? BufferedReader?? ins?? =?? new?? BufferedReader(new? InputStreamReader(process.getInputStream()));
??????? ? String line;
??????? ? while((line = ins.readLine())!=null)??
??????? ?? {??
??????? ?? Toast.makeText(this, line, Toast.LENGTH_LONG).show();
??????? ?? }
總結
以上是生活随笔為你收集整理的Android的数据存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客之星留念
- 下一篇: 查询数据,插入临时表