已解决:安卓8.0读取文件问题。包含intent调用文件管理器得到选定文件的路径,通过获取的文件路径得到SD卡内文本文件数据的读取方法

本文为记录毕业设计部分出现的问题,作为总结
近期在写毕业设计的时候,需要实现从安卓8.0的手机内置存储卡读取文本文件的数据内容,但在开始的时候一直抛出FileNotFoundException,显示找不到文件。
先贴出我读取文件的方法:
//---------------------------------------
        //设置打开文件监听器,调用intent打开系统文件管理得到路径
 Btnopen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("*/*");//设置类型,我这里是任意类型,任意后缀的可以这样写。
                //intent.setType(“audio/*”); //选择音频
                //intent.setType(“video/*”); //选择视频 (mp4 3gp 是android支持的视频格式)
                //intent.setType(“video/*;image/*”);//同时选择视频和图片
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                startActivityForResult(intent, 1);
            }
        });
    }

先通过intent,调用系统自带的文件管理器,选择文件。

 //回调
    //onActivityResult函数响应了选择文件的操作。
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {//是否选择,没选择就不会继续
            Uri uri = data.getData();//得到uri,后面就是将uri转化成file的过程。
            String[] proj = {MediaStore.Images.Media.DATA};

            Cursor actualimagecursor = managedQuery(uri, proj, null, null, null);
            int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            actualimagecursor.moveToFirst();
            String img_path = actualimagecursor.getString(actual_image_column_index);
            File file = new File(img_path);
            Toast.makeText(OpenFile.this, file.toString(), Toast.LENGTH_SHORT).show();
            String dd =file.toString();
            dizhi.setText(file.toString());
            readfilename=dizhi.getText().toString();
        }
}

在这里选择要打开的文件后,得到文件的路径。
我自己在华为mate8真机测试时得到的测试路径为:/storage/emulated/0/1.txt
大家自己测试的时候根据机型不同可能会有变化。

然后是读取文件:

//    读取SD卡中文件的方法
//定义读取文件的方法:

    public String readFromSD(String filename) throws
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值