【Android資料存放區】- File

來源:互聯網
上載者:User

標籤:android   資料存放區   sdcard   file   讀寫   


個人學習整理,如有不足之處,請不吝指教。轉載請註明:@CSU-Max

     

讀寫本應用程式資料檔案夾中的檔案       此種方法讀寫的檔案在/data/data/<應用程式套件組合名>中       android 中提供了 openFileInput(String fileName) 和 openFileOutput(String fileName, int mode) 兩個方法來讀取本應用程式資料檔案夾中的檔案和向其寫入。              openFileInput(String fileName)    開啟檔案輸入資料流              openFileOutput(String fileName, int mode)    開啟檔案輸出資料流註:openFileOutput(String fileName, int mode) 中的參數 mode 指定檔案開啟的形式:       MODE_PRIVATE :該檔案只能被當前程式讀寫       MODE_APPEND :以追加的模式開啟檔案,應用程式可以向檔案中追加內容       MODE_WORLD_READABLE :該檔案的內容可以被其他應用程式讀取       MODE_WORLD_WRITEABLE : 該檔案的內容可以被其他應用程式讀和寫執行個體:       本執行個體程式介面上檔案輸入部分有一個輸入框和一個按鈕,點擊按鈕可以將輸入框中輸入的資訊寫入到指定的檔案中去;讀取部分有一個文字框和一個按鈕,點擊按鈕文字框會顯示指定檔案中的內容。   讀取:                                                   寫入:     
   驗證寫入:

執行個體代碼:
package com.example.filedemo;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.PrintStream;import android.os.Bundle;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;/** *  * @author CSUMax * @version 1.0 2014-4-24 */public class MainActivity extends Activity {private Button bt_main_in; // 寫入檔案按鈕private Button bt_main_out; // 讀取檔案按鈕private EditText et_main_in;// 輸入文字框private TextView tv_main_out;// 顯示檔案內容@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);bt_main_in = (Button) this.findViewById(R.id.bt_main_in);bt_main_out = (Button) this.findViewById(R.id.bt_main_out);et_main_in = (EditText) this.findViewById(R.id.et_main_in);tv_main_out = (TextView) this.findViewById(R.id.tv_main_out);// 點擊按鈕將輸入框中的內容寫到檔案中bt_main_in.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String fileName = "demo.txt";String text = et_main_in.getText().toString();writeToFile(text, fileName);et_main_in.setText("");}});// 點擊按鈕將檔案中內容讀取出來顯示在文字框中bt_main_out.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String fileName = "demo.txt";tv_main_out.setText(readFromFile(fileName));}});}/** * 讀取檔案 *  * @param fileName * @return */public String readFromFile(String fileName) {try {FileInputStream fis = openFileInput(fileName);byte[] bytes = new byte[1024];StringBuffer sb = new StringBuffer();int i = 0;i = fis.read(bytes);if (i > 0) {sb.append(new String(bytes, 0, i));}return sb.toString();} catch (Exception e) {e.printStackTrace();}return null;}/** * 寫入檔案 *  * @param text *            寫入的內容 * @param fileName *            目標檔案的檔案名稱 */public void writeToFile(String text, String fileName) {try {// MODE_APPEND模式寫入,即追加模式FileOutputStream fos = openFileOutput(fileName, MODE_APPEND);PrintStream ps = new PrintStream(fos);ps.println(text);ps.close();} catch (Exception e) {e.printStackTrace();}}}

       程式中的 demo.txt 檔案可以通過 File Explorer 中 /data/data/<應用程式套件組合名>/files/demo.txt 看到,如所示(由於無關檔案較多,故分開截成兩幅圖了):


讀取資源檔中的檔案
       此處以讀取 resource 的 raw 中檔案為例,在 res 檔案夾下建立一個 raw 檔案夾,將之前的 demo.txt 檔案複製進去。    
    主要代碼:
public class ReadFileUtil {    public static String readFromRaw(Context context, int id) {        String str = "";        try {            // 得到輸入資料流            InputStream is = context.getResources().openRawResource(id);            int length = is.available();            byte[] bytes = new byte[length];            int i = 0;            i = is.read(bytes);            if (i > 0) {                // 設定編碼                str = EncodingUtils.getString(bytes, "UTF-8");            }            is.close();            return str;        } catch (Exception e) {            // TODO: handle exception        }        return null;    }}

    測試代碼:
public class ReaderTest extends AndroidTestCase {    private static final String TAG = "ReaderTest";    public void testReadFromRaw() {        Log.i(TAG, "---------------");        String str = "Failed";        str = ReadFileUtil.readFromRaw(getContext(), R.raw.demo);        Log.i(TAG, "========>" + str + "<========");    }}

       註:資源檔下的檔案通過 R 檔案中確定的 id 來訪問,如此處 R.raw. demo  。
讀寫 SD 記憶卡上的檔案
       有時候我們會把一些資料存放區在SD卡上,現在我們來類比一下,在 File Explorer 視圖中向/mnt/sdcard/目錄下添加之前的 demo.txt 檔案,現在試著讀取該檔案中資訊並向其中寫入資訊。    
    主要代碼:
public class ReadFileUtil {       public static String readFromSdcard(String fileName) {        String str = "";        try {            FileInputStream fis = new FileInputStream(fileName);            int length = fis.available();            byte[] bytes = new byte[length];            int i = 0;            i = fis.read(bytes);            if (i > 0) {                // 設定編碼                str = EncodingUtils.getString(bytes, "UTF-8");            }            fis.close();            return str;        } catch (Exception e) {            // TODO: handle exception        }        return null;    }    /**     * --注意向SD卡中的檔案寫入資訊時,要在AndroidManifest.xml檔案中加入相應的許可權--     */    public static void writeToSdcard(String text, String fileName){        try {            //構造方法的第二個參數表示追加模式            FileOutputStream fos = new FileOutputStream(fileName, true);            byte[] bytes = text.getBytes();            fos.write(bytes);            fos.close();        } catch (Exception e) {            e.printStackTrace();        }    }    }

    測試代碼:
public class ReaderTest extends AndroidTestCase {    private static final String TAG = "ReaderTest";     public void testReadFromSdcard() {        Log.i(TAG, "---------------");        String str = "Failed";        str = ReadFileUtil.readFromSdcard("/mnt/sdcard/demo.txt");        Log.i(TAG, "========>" + str + "<========");    }        public void testWriteToSdcard() {        Log.i(TAG, "---------------");        String text = " Max ";        ReadFileUtil.writeToSdcard(text, "/mnt/sdcard/demo.txt");    }}

註:       一般讀寫本應用程式中的檔案要使用 openFileInput 和 openFileOutput ;而讀寫 SD 記憶卡中的檔案需要使用 FileInputStrea 和 FileOutputStream 。        預設對SD卡中檔案只有可讀許可權,所以向SD卡中寫入資料時需要加入相應的許可權。
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />



                                                    ***************************************************************************

                                                    *  轉載請註明出處:  @CSU-Max    http://blog.csdn.net/csu_max      *

                                                    ***************************************************************************



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.