流文件存儲

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();
    }
}
相關文章
相關標籤/搜索