SDCard中文件存取的實現

注意:

第一步要先添加權限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

步驟:

         文件流

         1、寫:

                   a)創建文件輸出流(PATH

                   b)將內容寫入文件輸出流(str.getBytes())

                   bb)關閉流

         2、讀:

                   a)創建文件輸入流

                   b)創建字節數組緩存(ByteArrayBufferarrayBuffer = new ByteArrayBuffer(1000);)——>爲了後面分段讀取時拼接數據

                   c)創建字節數組buffer1024)(建立變量len=0

                   d)循環讀入——while(-1!=(len=fis.read(buffer)){arrayBuffer.append(buffer, 0, len) }

                   e)通過創建String的形式將字節數組轉換成字符串(new String(arrayBuffer.toByteArray()))

                   f)將內容顯示在文本框中

                   ff)關閉流

         對象流

         1、寫:

                   a)創建對象

                   b)創建文件輸出流(PATH

                   c)創建對象輸出流(ObjectOutputStream,將文件輸出流嵌套在裏面)

                   d)將對象寫入對象輸出流(oos.writeObject(person);)

                   dd)關閉最外層流(對象流)

         2、讀:

                   a)創建文件輸入流

                   b)創建對象輸入流

                   c)將讀到的Object對象強轉成所需對象(Personperson = (Person)ois.readObject();

                   d)在文本框中顯示對象的各項內容

                   dd)關閉最外層流(對象流)

 

代碼實現(文件流):

1、往sdcard中寫入數據

         FileOutputStreamfos = null;

                   try{

                            fos= new FileOutputStream(PATH);

                            Stringstr = writeToSdcard.getText().toString();

                            //將字符串打散寫入流中

                            fos.write(str.getBytes());

                   }catch (FileNotFoundException e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

                   }catch (IOException e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

                   }finally{

                            if(fos!=null){

                                     try{

//如果path有問題,會跳到finally中,而fos此時爲null,會發生空指針異常

                                               fos.close();

                                     }catch (IOException e) {

                                               //TODO Auto-generated catch block

                                               e.printStackTrace();

                                     }

                            }

                   }

2、從sdcard中讀取數據

         FileInputStreamfis = null;

                   //1000表示的是預留空間

                   ByteArrayBufferarrayBuffer = new ByteArrayBuffer(1000);

                   try{

                            fis= new FileInputStream(PATH);

                            byte[]buffer = new byte[1024];

                            intlen = 0;

                            while(-1!=(len=fis.read(buffer))){

                                     //拼接

                                     arrayBuffer.append(buffer,0, len);

                            }

                            //通過新建字符串的形式將arrayBuffer轉換成字節數組

                            StringreadBuffer = new String(arrayBuffer.toByteArray());

                            writeToSdcard.setText(readBuffer);

                   }catch (FileNotFoundException e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

                   }catch (IOException e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

                   }finally{

                            if(fis!=null){

                                     try{

                                               fis.close();

                                     }catch (IOException e) {

                                               //TODO Auto-generated catch block

                                               e.printStackTrace();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章