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






本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/4804133.html,如需转载请自行联系原作者
目录
相关文章
|
2天前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
114 83
|
4月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
6月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
449 1
|
4月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
246 0
|
6月前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
224 1
|
6月前
|
Android开发 iOS开发
[ionic]解决运行Android、IOS出现Could not find the web assets directory
[ionic]解决运行Android、IOS出现Could not find the web assets directory
56 1
|
6月前
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
201 0
|
Java Android开发 存储
Android 文件操作心得体会
android 的文件操作说白了就是Java的文件操作的处理。所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了。好了,话不多说,开始今天的正题吧。
989 0

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 7
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 10
    Android学习自定义View(四)——继承控件(滑动时ListView的Item出现删除按钮)