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對文件的操作了。
