转载

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

正文到此结束
Loading...