1、流文件存儲數組
一、基本方法簡介app
Android若是須要存儲大量的數據,須要使用到文件存儲ide
用來保存數據的方法爲:openFileOutput(String name, int mode)ui
其中,name參數表示文件的明成,若是文件不存在,則直接建立,文件的存儲位置爲:/data/data/包名/files/文件目錄,mode表示待存儲文件的模式。this
mode模式:spa
MODE_PRIVATE:表示私有文件,該文件只能被建立他的文件所訪問
MODE_APPEND:表示新的存儲內容會添加在原有文件內容的後面。
MODE_WORLD_READABLE:表示該文件能被全部的文件讀取,可是不能夠寫入。
MODE_WORLD_WEITABLE:表示該文件能被全部的文件寫入,也能夠讀取
用來查詢數據的方法爲openFileInput(String name),其中name參數表示文件的名稱code
注意:用來保存數據和查詢數據的方法名與現實思惟理解是相反的對象
向文件中保存數據的流程:blog
待輸入數據(文本等)—>轉化爲字節數組—>字節數組—>加入FileOutputStream—>FileOutputStream—>存入文件—>文件資源
從文件中查詢數據的流程圖:
文件—>轉爲FileInputStream—>FileInputStream—>FileInputStream取出字節數組—>字節數組—>轉爲數據—>數據
try{ String string ="111"; //將內容轉化爲本身數組 byte[] buffer = string.getBytes(); //建立文件輸出流及文件demo.text FileOutputStream fos = openFileOutput("demo.txt",MODE_PRIVATE); //將本身數組經過文件輸出流存入demo.txt fos.write(buffer); //關閉文件輸出流 fos.close(); }catch(Exception e){ e.printStackTrace(); }
除了能夠將文件保存在默認的位置外(/data/data/包名/files/),還能夠保存在其餘位置:
好比
(1)存儲到/data/data/(本工程的包名)/demo.txt中:
File myfile = new File("/data/data/包名/demo.txt"); FileOutputStream fos = new FileOutputStream(myfile);
注意:只能存儲到本工程的包名文件夾下面
(2)存儲到sdcard中:
String path = Enviroment.getDownloadCacheDorectory().getPath(); File myfile = new File(pah+"demo.txt"); FileOutputStream fos = new FileOutputStream(myfile);
此外,還須要添加與SD卡相關的權限。
查詢文本的核心代碼:
try{ //區的文件,並肩文件中的字節數組放入文件輸入流中 FileInputStream fis = openFileInput("demo.txt"); //取得文件的大小,available()方法能夠取得FileInputStream文件輸出流的大小 int length = fis.available(); //設置緩衝字節數組,與文件大小相同 byte[] buffer = new byte[length]; //將文件輸入流中的字節數組放入緩衝節數組 fis.read(buffer); //我下兩種方法是將緩衝字節數組轉化爲文本 //String queryResult = new String(buffer,"UTF-8"); String queryResult=EncodingUtils.getString(buffer,"UTF-8"); fis.close(); }catch(Exception e){ e.printStackTrace(); }
小知識:
//讀取raw資源文件夾下面的內容 Resources myres = getResources(); InputStream is = myres.openRawResource(R.raw.demo1); //讀取Assets文件夾下的內容 Resources myres = getResources(); InputStream is = myres.getAssets().open(filename); //讀取sdcard文件夾下的內容 File file = new File("/sdcard/filename"); FileInputStream fis = new FileInputStream(file); //讀取特定未知的文件 File file = new File("/data/data/包名/filename"); FileInputStream fis = new FileInputStream(file);
1、文件存儲
1.將數據存儲到文件中
Context類提供了一個openFileOutput()方法,可用於將數據存儲到指定的文件中,這個方法接收兩個參數,第一個是參數名,在文件建立的時候就是使用的這個名稱,第二個參數是文件的操做方式,一個是MODE_PRIVATE(是默認時的操做方式,表示當指定一樣文件名的時候,所寫入的內容將會覆蓋原文件中的內容)和MODE_APPEND(表示若是該文件已存在,就往文件裏追加內容,不存在就建立新文件)
openFileOutput()方法返回一個FileOutputStream對象,獲得這個對象以後就可使用JAVA流的方式將數據寫入到文件中了
保存:
@Override
protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); String inputText=edit.getText().toString(); save(inputText); }
private void save(String inputText) { // TODO Auto-generated method stub FileOutputStream out=null; BufferedWriter writer=null; try{ out=openFileOutput("data", Context.MODE_PRIVATE); //用openFileOutput方法獲得一個FileOutputStream對象 writer=new BufferedWriter(new OutputStreamWriter(out)); writer.write(inputText); //經過BufferedWriter將文本寫入到文件夾中 }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(writer!=null){ writer.close(); } }catch(IOException e){ e.printStackTrace(); } } }
提取
String inputText=load(); if(!TextUtils.isEmpty(inputText)){ //判斷是否爲空,TextUtils.isEmpty()方法能夠一次性進行兩種空值的判斷,當傳入的字符串 //等於null或者等於空字符串的時候都會返回true,從而不須要單獨去判斷這兩種空值 edit.setText(inputText); //就把讀取的內容添加到EditText中 edit.setSelection(inputText.length()); //調用這個方法將輸入的光標移動到文本的末尾以便於繼續輸入 Toast.makeText(this, "Restoring succeeded",Toast.LENGTH_SHORT).show(); private String load() { FileInputStream in=null; BufferedReader reader=null; StringBuilder content=new StringBuilder(); try{ in=openFileInput("data"); reader=new BufferedReader(new InputStreamReader(in)); String line=""; while ((line=reader.readLine())!=null){ content.append(line); } }catch(IOException e){ e.printStackTrace(); }finally{ if(reader!=null){ try{ reader.close(); }catch(IOException e){ e.printStackTrace(); } } } return content.toString(); } }