Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android學習日記13--數據存儲之File存儲

android學習日記13--數據存儲之File存儲

編輯:關於Android編程

4、文件存儲File   File即傳統的I/O 流存儲文件,Activity提供了openFileOutput()方法可以用於把數據輸出到文件中, 具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。     下面例子演示 如何保存文件、讀取文件和把文件保存在SD卡上。       (1) 保存文件   復制代碼  1 public void save(String str) {  2           3         try {  4             FileOutputStream output = this.openFileOutput("test.txt", Context.MODE_WORLD_READABLE);  5             output.write(str.getBytes());  6             output.close();  7             Toast.makeText(MainActivity.this,"Saved",Toast.LENGTH_LONG).show();  8         } catch (IOException e) {  9             // TODO: handle exception 10         } 11          12     } 復制代碼   openFileOutput()方法的第一參數用於指定文件名稱,不能包含路徑分隔符“/” ,如果文件不存在,Android 會自動創建它。 創建的文件保存在/data/data/<package name>/files目錄,如: /data/data/com.example.filesave/files/test.txt           openFileOutput()方法的第二參數用於指定操作模式,有四種模式,分別為:  Context.MODE_PRIVATE Context.MODE_APPEND Context.MODE_WORLD_READABLE Context.MODE_WORLD_WRITEABLE Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容, 如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。 Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有權限讀寫該文件。 MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。 如果希望文件被其他應用讀和寫,可以傳入: openFileOutput("test.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 ,只有這樣其他程序才能正確訪問。       (2) 讀取文件   復制代碼  1 public String load() {  2         String str = "";  3         try {  4             FileInputStream input = this.openFileInput("test.txt");  5             ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();  6             byte[] buffer = new byte[1024];   7               8             int length = -1;  9              10             while ((length=input.read(buffer))!=-1) { 11                 byteOutput.write(buffer,0,length); 12                  13             } 14              15             input.close(); 16             byteOutput.close(); 17  18             str = byteOutput.toString(); 19              20         } catch (IOException e) { 21             // TODO Auto-generated catch block 22             e.printStackTrace(); 23         } 24          25         return str; 26          27     } 復制代碼 對於私有文件只能被創建該文件的應用訪問,如果希望文件能被其他應用讀和寫,可以在創建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權限。 Activity還提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用於獲取/data/data/<package name>/cache目錄 getFilesDir()方法用於獲取/data/data/<package name>/files目錄。   打印文件讀取的內容:           (3) 創建SD卡       使用Activity的openFileOutput()方法保存文件,文件是存放在手機空間上,一般手機的存儲空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。對於像視頻這樣的大文件,我們可以把它存放在SDCard。 SDCard是干什麼的?你可以把它看作是插在手機上的移動硬盤或U盤。   創建模擬器SD卡,並設文件為可讀狀態 1.打開你安裝Android的文件夾找到tools這個文件夾,復制路徑 2.設置命令提示符的默認路徑為你復制的路徑 3.在後面輸入如下命令(注意空格):     mksdcard 256M C:\Users\chendd\Desktop\sdcard.img   256M是你要設置SD卡的大小,後面是你創建虛擬SD卡的路徑。   回車,這樣就創建好了SD卡的鏡像文件,還要讓Android模擬器知道這個SD卡在什麼地方,命令如下:   dir C:\Users\chendd\Desktop\sdcard.img   再次回車   4、設置模擬器,edit裡SD Card 選擇File,然後browse你的sdcard.img,再edit AVD結束。通過DDMS添加試試看,這個時候File Exprorer下的sdcard的permissions變成了d---rwxr-x,就可以添加了。   在程序中訪問SDCard,你需要申請訪問SDCard的權限。 在AndroidManifest.xml中加入訪問SDCard的權限如下:   1     <!-- 在SDCard中創建與刪除文件權限 --> 2     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 3  4     <!-- 往SDCard寫入數據權限 --> 5     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />     (4) 保存文件在SD卡上   要往SDCard存放文件,程序必須先判斷手機是否裝有SDCard,並且可以進行讀寫   復制代碼  1 public void save_sd(String str) {  2           3         File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard目錄  4   5         File saveFile = new File(sdCardDir, "testsd.txt");  6   7         FileOutputStream outStream;  8         try {  9             outStream = new FileOutputStream(saveFile); 10             outStream.write(str.getBytes()); 11             outStream.close(); 12         } catch (IOException e) { 13             // TODO Auto-generated catch block 14             e.printStackTrace(); 15         } 16          17     } 復制代碼 Environment.getExternalStorageState()方法用於獲取SDCard的狀態,如果手機裝有SDCard,並且可以進行讀寫,那麼方法返回的狀態等於Environment.MEDIA_MOUNTED。   Environment.getExternalStorageDirectory()方法用於獲取SDCard的目錄,當然要獲取SDCard的目錄,你也可以這樣寫:   File sdCardDir = new File("/sdcard"); //獲取SDCard目錄   File saveFile = new File(sdCardDir, "test.txt");   // 第一種寫法更靈活   //上面兩句代碼可以合成一句: File saveFile = new File("/sdcard/a.txt");   FileOutputStream outStream = new FileOutputStream(saveFile);   outStream.write("test".getBytes());   outStream.close();
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved