android读写文件完整版

本文详细介绍了在Android应用中实现文件读写的全过程。包括在AndroidManifest.xml中配置读写权限,针对危险权限进行运行时权限处理的方法,以及具体的文件读写操作实现。作者通过自己的实践经历,分享了在这一过程中遇到的问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      鉴于实现android文件读写的惨痛经历,我决定将其实现过程写下来。其实网站上关于这方面的博客、讨论很多,我也看了很多,但都不太完整(也可能是我没看明白),导致我在这个问题上纠结了足足4天,在完成前1小时,我甚至想怒摔平板(原因是我要root它,但下载的5、6个应用都未能root成功,官方论坛给的root链接共享盘居然过期?实力心疼自己)。当然也有我自身原因,因为我是刚从web过来做android开发,近三年也没用过安卓手机、平板类的设备,导致我开始时都忘了安卓机是有文件管理器的。。。。。。

      好了,废话不多说,正式开始

  • 权限配置,在AndroidManifest.xml中添加外设存储的读写权限。android的权限主要分为两类,普通权限和危险权限(其实还有第三类特殊权限),如果是申请普通权限,只用在AndroidManifest.xml中添加一下权限声明就可以了,因为系统会自动进行授权。但如果是危险权限,则还需进行运行时权限处理。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  • 权限运行时申请,本次使用的外设存储的读写权限是属于危险类权限,所以必须进行运行时权限处理。先判断是否拥有读写权限,若没有则先申请权限。然后重写onRequestPermissionsResult方法,当申请权限成功后,即执行写文件方法。
if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_DENIED) {
    ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
} else {
    writeDataFile();
}
   @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    writeDataFile();
                } else {
                    Toast.makeText(this, "申请权限失败", Toast.LENGTH_SHORT).show();
                }
        }
    }
  • 文件写入
     private void writeDataFile() {
            BufferedWriter writer = null;
            FileWriter fileWriter=null;
            String fileName="";
            try {
                fileName="info.txt";
                File newFile = new File(Environment.getExternalStorageDirectory(), fileName);
                fileWriter = new FileWriter(newFile, false);
                writer = new BufferedWriter(fileWriter);                
                writer.write("Hello World");               
                writer.flush();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (writer != null) {
                    try {
                        fileWriter.close();
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    }
  • 文件读取
        public ArrayList<String> readFileData(){
            ArrayList<String> arrayList=new ArrayList<>();
            BufferedReader reader=null;
            FileReader fileReader=null;
            File file=new File(Environment.getExternalStorageDirectory(),"info.txt");
            try {
                fileReader=new FileReader(file);
                reader=new BufferedReader(fileReader);
                String line="";
                while ((line=reader.readLine())!=null){
                    arrayList.add(line);
                }
                return arrayList;
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
       }

 

转载于:https://my.oschina.net/mandy4107/blog/1490171

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值