Android读写assets、raw、sdard和工程文件的方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109333.html原文链接:https://javaforall.net

(0)
上一篇 2021年9月9日 上午6:00
下一篇 2021年9月9日 上午7:00


相关推荐

  • 小米bl未解锁变砖了如何刷机_如何正确刷机

    小米bl未解锁变砖了如何刷机_如何正确刷机1.一部可以解锁bl的手机选择一部合适可以解锁的手机,以小米为例(我有的),小米需要绑定账号在新手机15天。去小米官方申请(https://www.miui.com/unlock/index.html),登陆账号,下载解锁工具,在工具里面登录小米账号,数据线连接进入bl模式的手机.(解锁会清空手机数据).解锁后手机仍保修登录小米账号,下载解锁工具2.选择合适的twrp下载twrp后,电脑使用…

    2022年5月1日
    378
  • 增强的for语句可以方便地遍历数组_java遍历字符串

    增强的for语句可以方便地遍历数组_java遍历字符串增强for循环快捷键:iter+回车键。for增强for循环和普通for循环的区别普通for循环可以没有遍历的目标,增强for循环。缺点不能在这个增强循环里动态删除集合里面的内容,获取下标等。使用场景增强for循环主要就是为了方便遍历。…

    2025年12月1日
    11
  • Android实现EditText输入金额

    Android实现EditText输入金额EditText 是 Android 中一个非常实用的控件 有很多 InputType 可以来达到不同的输入效果 如下图 比如 密码输入 数字输入等等 但是最近在项目中要实现 EditText 输入金额 金额的限制因素很多 比如 只能输入数字和小数点 首位不能输入 0 和小数点 小数点后面只能保留两位等等 这些仅仅用 InputType 是无法实现的 今天用 InputFilter 来实现 1 首先需要

    2026年3月18日
    2
  • java编译器——安装IDEA 步骤

    java编译器——安装IDEA 步骤1、从官网上下载ideaIU-2021.2.3,地址如下,点击download;IntelliJIDEA:TheCapable&ErgonomicJavaIDEbyJetBrainsACapableandErgonomicJavaIDEforEnterpriseJava,Scala,Kotlinandmuchmore…https://www.jetbrains.com/idea/图12、IntelliJIDEA是一款跨平台的开发工具,

    2022年7月15日
    47
  • 计算机三级网络技术大题暴力做题法

    计算机三级网络技术大题暴力做题法

    2021年9月28日
    58
  • android studio报错Gradle project sync failed. Please fix your project and try again

    android studio报错Gradle project sync failed. Please fix your project and try againAndroidStudio导入项目或者新建项目想运行的时候可能会报错Gradleprojectsyncfailed.Pleasefixyourprojectandtryagain,原因应该是Gradle的一些东西没配好。这2个版本必须要保证本地有,而且一定要对得上。怎么知道本地有没有,下面2张图片展示他们各自的路径。(默认路径在安装AndroidS…

    2022年7月15日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号