數(shù)據(jù)篇之File

Context提供2個方法打開應用程序的數(shù)據(jù)文件夾里的文件IO流悬蔽。

  1. FileInputStream openFileInput(String name) 輸入數(shù)據(jù)到name文件中
    2)FileOutputStream openFileOutput(String name,int mode) 以mode模式獲得文件輸出流(輸出數(shù)據(jù)到name文件中)

mode
MODE_PRIVATE私有(當前應用程序)覆蓋模式;
MODE_APPEND私有捉兴、追加模式蝎困;
MODE_WORLD_READABLE公有、只讀模式
MODE_WORLD_WRITEABLE:公有倍啥、可寫模式
注意禾乘,如果希望其他使得文件模式疊加,則可以使用加號連接虽缕;
比如:
Context.MODE_WORLD_READABLE **+ **Context.MODE_WORLD_WRITEABLE
表示其他應用讀寫始藕;


文件存儲簡單的來說就是一般的JAVASE中的IO流,只是把他應用于Android手機中而已彼宠;
創(chuàng)建的文件保存在/data/data/<package name>/files目錄

創(chuàng)建文件與刪除文件
  • File file = new File("文件的保存路徑")
  • 刪除文件 file.delete();
    File file = new File("mnt/sdcard/test")
    if(!file.exisits()){
        file.createNewFile();
      }else{
        Toast.makeText(MainActivity.this,"此文件已經存在",1).show();
    }
      file.delete();

要拋出異常鳄虱!

得到當前應用程序默認的數(shù)據(jù)存儲目錄
File file=this.getFileDir(); //----- /data/data/cn.xxx.xxx(當前包)/files ```

######得到當前應用程序默認的緩存文件的存放位置

File file=this.getCacheDir(); //----- /data/data/cn.xxx.xxx(當前包)/cache```
可以把一些不是非常重要的文件在此處創(chuàng)建使用凭峡,
如果手機的內存不足的時候拙已,系統(tǒng)會自動去刪除APP的cache目錄的數(shù)據(jù)

得到外部的存儲位置

File file=this.getExternalFileDir();
File file=this.getExternalCacheDir();
方法同上

舉個栗子:
一個EditText(etWrite)用于寫入數(shù)據(jù)
一個TextView(tvRead)用于讀取數(shù)據(jù)
兩個Button一個用于保存saveButton 摧冀,一個用于讀取readButton

public void onClick(View v) {  
          switch(v.getId()){
              case R.id.saveButton:
                  String writeContext=etWrite.getText().toString();
                  try{
                      FileOutputStream fos=this.openFileOutput("文件名"倍踪,MODE_PRIVATE);//此時如果文件不存在系宫,系統(tǒng)會自動幫你在默認目錄下創(chuàng)建
                      fos.write(writeContext.getBytes());
                      
                    }catch(Exception e){  
                    e.printStackTrace();  
                    }finally{  
                    try {  
                        fos.close();  //建議把close方法放到finally中
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
              case R.id.readButton:
                       String content=null;
                      try{
                      FileInputStream fis =this.openFileInput("文件名");//獲得輸入流 
                      ByteArrayOutputStream baos = new ByteArrayOutputStream();
                      byte[] buffer = new byte[1024];//每次讀取1024個字節(jié)
                      int len=0;
                      while(len=fis.read(buffer)!=-1){
                            baos.write(buffer,0,len);
                        }
                      content=baos.toString();
                    }catch(Exception e){  
                    e.printStackTrace();  
                    }finally{  
                    try {  
                        fis.close(); 
                        baos.close();
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
將文件保存到SDCard

如果一個文件很大,則不適用于存放在手機的存儲中建车;
如果手機存在sdcard扩借,則sdcard的目錄為/mnt/sdcard目錄;
在AndroidManifest.xml中設置:

<uses-permission 
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>  
<uses-permission 
android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  
   <application.../>  ```
**存儲到sdcard核心代碼**:

File f = new File(Environment.getExternalStorageDirectory(),filename);
out = new FileOutputStream(f,true);
out.write(filecontent.getBytes("UTF-8")); ```
讀取sdcard核心代碼

File f = new File(Environment.getExternalStorageDirectory(),filename);  
in = new FileInputStream(f);  
while((length=in.read(buf))!=-1){  
    bout.write(buf,0,length);  
}  
byte[] content = bout.toByteArray();    ```
其實主要就是存儲目錄問題缤至;

注意:

在Android中1.5潮罪、1.6的sdcard目錄為/sdcard,而Android2.0以上都是/mnt/sdcard领斥,因此如果我們在保存時直接寫具體目錄會不妥嫉到,因此我們可以使用:
**Environment.getExternalStorageDirectory();**獲取sdcard目錄;

建議:

(1)不能純粹使用sdcard保存法月洛,因為如果不能判定一部手機是否存在sdcard何恶,如果沒有,則需要提供其他解決方法嚼黔,比如
保存到手機存儲细层;
提示不存在sdcard;
可以使用:

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//執(zhí)行存儲sdcard方法
}
else{
//存儲到手機中唬涧,或提示
}


當應用程序在安裝時系統(tǒng)就會分配給他一個userid疫赎,當該應用要去訪問其他資源比如文件的時候,就需要userid匹配碎节。默認情況下虚缎,任何應用創(chuàng)建的文件,sharedPreferences钓株,數(shù)據(jù)庫都應該是私有的(位于/data/data/<package name>/files)实牡,其他程序無法訪問。除非是在創(chuàng)建時制定了MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末轴合,一起剝皮案震驚了整個濱河市创坞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌受葛,老刑警劉巖题涨,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異总滩,居然都是意外死亡纲堵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門闰渔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來席函,“玉大人,你說我怎么就攤上這事冈涧∶剑” “怎么了正蛙?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長营曼。 經常有香客問我乒验,道長,這世上最難降的妖魔是什么蒂阱? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任锻全,我火速辦了婚禮,結果婚禮上录煤,老公的妹妹穿的比我還像新娘虱痕。我一直安慰自己,他們只是感情好辐赞,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硝训,像睡著了一般响委。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窖梁,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天赘风,我揣著相機與錄音,去河邊找鬼纵刘。 笑死邀窃,一個胖子當著我的面吹牛,可吹牛的內容都是我干的假哎。 我是一名探鬼主播瞬捕,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舵抹!你這毒婦竟也來了肪虎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤惧蛹,失蹤者是張志新(化名)和其女友劉穎扇救,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體香嗓,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡迅腔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了靠娱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沧烈。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖像云,靈堂內的尸體忽然破棺而出掺出,到底是詐尸還是另有隱情徽千,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布汤锨,位于F島的核電站双抽,受9級特大地震影響,放射性物質發(fā)生泄漏闲礼。R本人自食惡果不足惜牍汹,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柬泽。 院中可真熱鬧慎菲,春花似錦、人聲如沸锨并。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽第煮。三九已至解幼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間包警,已是汗流浹背撵摆。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留害晦,地道東北人特铝。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像壹瘟,于是被迫代替她去往敵國和親鲫剿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容