Android讀寫assets、raw、sdard和工程文件的方法


  Android開發離不開對文件的操作,前面的文章“Android簡易數據存儲之SharedPreferences”和“Android數據存儲之SQLite的操作”,分別講解了簡單的數據的存儲和數據庫數據的操作。然而,前面的兩篇文章都未涉及具體文件的操作。下面來看下Android是怎么操作其內置目錄文件及外部sdcard數據的。

  環境:Android studio、海馬玩模擬器

  資源文件:

    /assets目錄下test.txt

aaaaaaaaaaaaaa
bbbbbbb

    /res/raw(需要手工創建)目錄下rawfile.txt

raw file
ddddddddddd
eeeeeeeeee
ffffffffff

  一、讀取assets目錄下的文件

            //讀寫assets目錄下的文件
            InputStream is = getResources().getAssets().open("test.txt");
            Reader in = new InputStreamReader(is);
            BufferedReader bufferedReader = new BufferedReader(in);
            String line = null;
            while (null != (line = bufferedReader.readLine()) ){
                System.out.println("assets file==========" + line);
            }
            bufferedReader.close();
            in.close();
            is.close();

  由於assets下的文件不會再R.java中生成相應的ID,因此Android提供了AssetManager的方法訪問assets下的資源。

  二、讀取raw目錄下的文件

            //讀取raw目錄下的文件,raw位於res目錄下,需要手工創建
            is = getResources().openRawResource(R.raw.rawfile);
            in = new InputStreamReader(is);
            bufferedReader = new BufferedReader(in);
            line = null;
            while (null != (line = bufferedReader.readLine()) ){
                System.out.println("rawfile==========" + line);
            }
            bufferedReader.close();
            in.close();
            is.close();

  三、讀寫工程內部文件

           //讀寫工程內部文件
            FileOutputStream fileOutputStream = openFileOutput("projectfile.txt", Context.MODE_PRIVATE);
            OutputStreamWriter osw = new OutputStreamWriter(fileOutputStream);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write("ooooooooooooooooooo");
            bw.close();
            osw.close();
            fileOutputStream.close();

            FileInputStream fileInputStream = openFileInput("projectfile.txt");
            InputStreamReader isr = new InputStreamReader(fileInputStream);
            char[] input = new char[fileInputStream.available()];
            isr.read(input);
            isr.close();
            fileInputStream.close();
            String str = new String(input);
            System.out.println("project file=============" + str);

  四、讀寫sdcard文件

  1、AndroidManifest.xml中添加權限控制

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

  2、讀寫sdcard文件

            //讀寫sdcard,需要在AndroidManifest.xml中添加權限說明
            //<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
            File file = Environment.getExternalStorageDirectory();//獲取sdcard路徑
            if(file.exists()){//判斷是否存在sdcard
                System.out.println("sdcard file path========" + file.getAbsolutePath());
                File myfile = new File(file, "myfile_sdcard.txt");
                myfile.createNewFile();
                FileOutputStream fos = new FileOutputStream(myfile);
                fos.write("AAAAAAAAAAa".getBytes());
                fos.flush();
                fos.close();
            }

            //讀取sdcard文件
            File file1 = new File(file, "myfile_sdcard.txt");
            InputStream inputStream = new FileInputStream(file1);
            Reader reader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader1 = new BufferedReader(reader);
            String iline = null;
            while(null != (iline = bufferedReader1.readLine())){
                System.out.println("from sdcard myfile_sdcard.txt============" + iline);
            }
            bufferedReader1.close();
            reader.close();
            inputStream.close();

  五、將APP運行到模擬器中,此時可以看到如下的輸出結果

09-13 09:44:57.520    2243-2243/com.example.ibm.dataoperate I/System.out﹕ assets file==========aaaaaaaaaaaaaa
09-13 09:44:57.524    2243-2243/com.example.ibm.dataoperate I/System.out﹕ assets file==========bbbbbbb
09-13 09:44:57.528    2243-2243/com.example.ibm.dataoperate I/System.out﹕ rawfile==========raw file
09-13 09:44:57.528    2243-2243/com.example.ibm.dataoperate I/System.out﹕ rawfile==========ddddddddddd
09-13 09:44:57.532    2243-2243/com.example.ibm.dataoperate I/System.out﹕ rawfile==========eeeeeeeeee
09-13 09:44:57.532    2243-2243/com.example.ibm.dataoperate I/System.out﹕ rawfile==========ffffffffff
09-13 09:44:57.544    2243-2243/com.example.ibm.dataoperate I/System.out﹕ project file=============ooooooooooooooooooo
09-13 09:44:57.552    2243-2243/com.example.ibm.dataoperate I/System.out﹕ sdcard file path========/mnt/sdcard
09-13 09:44:57.556    2243-2243/com.example.ibm.dataoperate I/System.out﹕ from sdcard myfile_sdcard.txt============AAAAAAAAAAa

  上述四種操作Android文件的方式,各個處理方式都有所不同。

    1、讀取assets目錄下的資源文件時需要通過getResources().getAssets()方法獲取AssetManager的open方法來進行處理;

    2、而讀取raw目錄下的資源文件則通過getResources().openRawResource(R.raw.資源名稱)的方式來獲取;

    3、讀寫工程其他目錄的文件則通過openFileOutput和openFileInput來進行處理;

    4、最后sdcard文件的操作需要額外在AndroidManifest.xml中進行權限的聲明,並通過Environment.getExternalStorageDirectory()獲取sdcard的路徑,剩下的就是Java對文件的操作了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM