Android如何写文件到sdcard目录或指定目录,读指定目录中指定文件的内容

这篇具有很好参考价值的文章主要介绍了Android如何写文件到sdcard目录或指定目录,读指定目录中指定文件的内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 首先在AndroidManifest中添加读写权限:


<!--    写外部存储-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<!--    读外部存储-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<!--    android 10 读写sd卡权限-->
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"
        tools:ignore="ProtectedPermissions" />
public class FileWriteReadActivity extends Activity {
    private static final String TAG="FileWriteReadActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_new_bd_meige);
        //将内容为"test read file222" 的文本文件baa.txt存到/sdcard目录下
        writeFile("test read file222","/sdcard","baa.txt");


        try {
            Thread.sleep(3000);
            //从/sdcard目录中读baa.txt文件中的内容
            String fileActivateData = getFileActivateData("/sdcard","baa.txt");
            Log.e(TAG,"fileActivateData==="+fileActivateData);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


    /**
     * 写文本文件到指定目录下
     * @param content 文本内容 "test read file222"
     * @param rootPath 指定要存放的目录 此示例中是/sdcard
     * @param authName 文件名称 "baa.txt"
     */
    public void writeFile(String content,String rootPath,String authName) {
        try {
            //判断实际是否有SD卡,且应用程序是否有读写SD卡的能力,有则返回true
            if (Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED)) {
                String path = rootPath;
                File dir = new File(path);
                if (!dir.exists()) {
                    dir.mkdirs();
                }
                File targetFile = new File(path +"/"+authName);
                Log.e("FilePackUtil", "targetFile.getPath()===" + targetFile.getPath());
//                方式一:使用RandomAccessFile是在原有的文件基础之上追加内容,
//                RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");
//                raf.seek(targetFile.length()); //光标移到原始文件最后,再执行写入
//                raf.write(content.getBytes());
//                raf.close();

//                方式二:而使用outputstream则是要先清空内容再写入
                FileOutputStream fileOutputStream = new FileOutputStream(targetFile);
                byte[] buffer=content.getBytes();
                fileOutputStream.write(buffer, 0, buffer.length);// 开始写入数据到这个文件。
                fileOutputStream.flush();
                fileOutputStream.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 读取指定目录下指定文件的内容
     * @param fileAbsolutePaht 指定的目录 /sdcard
     * @param txtName 指定的文件 "baa.txt"
     * @return
     */
    private String getFileActivateData(String fileAbsolutePaht,String txtName) {
        ArrayList<String> result = new ArrayList<String>();
        File file = new File(fileAbsolutePaht);
        File[] files = file.listFiles();
        if (files != null) {
            //筛选指定目录下是否有指定文件
            for (int i = 0; i < files.length; ++i) {
                if (!files[i].isDirectory()) {
                    String fileName = files[i].getName();
                    if (fileName.equals(txtName)) {
                        result.add(fileName);
                    }
                }
            }
            
            //若有指定文件,则读文件内容
            if (result.size() != 0) {
                return readTxtFile(fileAbsolutePaht + "/"+ result.get(0));
            }
        }
        return "";
    }


    /**
     * 读文件中的内容 
     * @param strFilePath /sdcard/baa.txt
     * @return
     */
    public String readTxtFile(String strFilePath) {
        String path = strFilePath;
        Log.e("FilePackUtil", "strfilePath===" + path);
        String content = ""; //文件内容字符串
        //打开文件
        File file = new File(path);
        //如果path是传递过来的参数,可以做一个非目录的判断
        if (file.isDirectory()) {
            Log.d("TestFile", "The FaceAuthFile doesn't not exist.");
        } else {
            try {
                InputStream instream = new FileInputStream(file);
                if (instream != null) {
                    InputStreamReader inputreader = new InputStreamReader(instream);
                    BufferedReader buffreader = new BufferedReader(inputreader);
                    String line;
                    //分行读取
                    while ((line = buffreader.readLine()) != null) {
                        content += line;
                    }
                    instream.close();
                }
            } catch (java.io.FileNotFoundException e) {
                Log.d("TestFile", "The File doesn't not exist.");
            } catch (IOException e) {
                Log.d("TestFile", e.getMessage());
            }
        }
        return content;
    }
}

踩坑提醒:

若报错/sdcard/....:open failed:EACCES(Permission denied) 则表示没有权限向sdcard中写文件

解决方法:

1、更换文件存储目录为外部存储。如使用getExternalCacheDir(),存放路径一般是/storage/sdcard/Android/data/<应用包名>/cache目录。 

2、将应用打包成系统应用。在AndroidManifest.xml 中manifest节点下添加 android:sharedUserId="android.uid.system",还需要系统签名。文章来源地址https://www.toymoban.com/news/detail-684962.html

到了这里,关于Android如何写文件到sdcard目录或指定目录,读指定目录中指定文件的内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Android] Android文件系统中存储的内容有哪些?

    如果不考虑厂商造成的差异,Android 标准的分区还是能构成一个定义良好的文件系统层的。 纵观全文,虽然没有太多技术性和需要逻辑推理的内容,但是看完之后,相信对于Android文件系统会有更深入的理解。例如我们Android开发的时候经常需要使用到的data/data目录,例如进入

    2024年01月25日
    浏览(29)
  • Android 读取Txt文件内容

    View Code 一个获取InputStream中字符串内容的方法:传入一个InputStream,返回其中的文本内容。 View Code 以gbk编码读取内容,不同的文本文件可能编码不同,如果出现乱码,可能需要调整编码。 手机测试有安卓版本限制、生产厂家限制,如:某OS

    2024年02月17日
    浏览(41)
  • 7.6:Python如何在文件中查找指定的内容?

    在当今数据量日益增长的时代,对于数据的处理和分析成为了各行各业都需要掌握的技能。Python作为一门流行的编程语言,拥有着强大的数据处理和分析能力,成为了数据科学领域的重要工具之一。在Python中,处理文件中的数据是常见的需求之一,而在处理文件数据中查找指

    2024年02月08日
    浏览(33)
  • Android Studio里项目的各目录与文件

    一、总项目的目录结构 我们使用Android Studio创建安卓项目成功后,就会出现以下这个文件结构: .idea是自动生成的文件,无需理会。 app为最重要的文件,里面放置的便是项目的代码文件和资源文件。 gradle,顾名思义,就是构建项目的gradle。为了使得构建你的app项目方便管理

    2024年02月07日
    浏览(77)
  • Android文件选择器 路径选择 支持安卓4.4 ~ 13 支持Android/data目录访问 支持SD卡 适配Android11

    Android上进行文件选择或操作的第三方库,自动申请存储权限,支持 Android4.4 ~ 13,再也不用为了适配各种版本而苦恼了,快速集成,一句代码搞定,完善的文档,支持无root权限访问和操作Android/data和Android/obb目录(适配Android 13),支持SD卡,高度自定义UI满足你的所有需求,使用非常

    2024年02月04日
    浏览(39)
  • [Android Studio]Android 数据存储-文件存储学习笔记-结合保存QQ账户与密码存储到指定文件中的演练

     🟧🟨🟩🟦🟪 Android Debug 🟧🟨🟩🟦🟪 Topic   发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 🪁文件存储 💾内部存储 📀存储数据到文件 💿从文件中读取数据 💯实战演练--保存QQ账号与密码 📖acticity_main.xml布局文件  📖 FileSave

    2023年04月14日
    浏览(50)
  • android studio 如何下载指定版本的NDK

    安装及配置 NDK 和 CMake  |  Android 开发者  |  Android Developers 如果官方文档看不懂的,就看我写的口水话版本吧; 1、AS打开SDK、NDK下载的那个对话框,如图:    2、非常关键的一步,默认情况下选项的子项未展开,所以需要勾选右下角 “Show Package Detail” ,CMake也是一样的哈

    2024年02月12日
    浏览(57)
  • Android JNI系列详解之CMake配置库文件的输出目录

    一、前提 阅读上一篇文章Android JNI系列详解之CMake编译工具的使用,里面讲到了需要配置两个文件:CMakeList.txt和build.gradle 二、配置CMake编译工具输出库文件的路径 1.默认的库文件输出路径:app/build/intermediates/cmake/debug/obj 由此可见不便于每次查找,因此我们需要将这个路径配置

    2024年02月10日
    浏览(37)
  • UE5 Android下载zip文件并解压缩到指定位置

    一、下载是使用市场的免费插件 二、解压缩是使用市场的免费插件 三、Android路径问题 windows平台下使用该插件没有问题,只是在Android平台下,只有使用绝对路径才能进行解压缩,所以如何获得Android下的绝对路径?增加C++文件获得Android平台的文件路径。 四、首先是利用Blu

    2024年02月06日
    浏览(43)
  • 批处理批量替换文本内容,用bat代码全篇替换txt文本文件中指定字符信息

    批处理批量全篇替换txt文本文件中指定字符信息,修改三个参数后即可使用,话不多说直接上代码: @echo off setlocal EnableDelayedExpansion set path_str=\\\"C:UsersAdministratorDesktop1.txt\\\" set old_str=需要替换的原文本内容 set new_str=替换后的文本内容 set souerce_path=%path_str% for /f \\\"tokens=1* delims=

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包