Android 关于文件及文件夹的创建 、删除、重命名、复制拷贝、添加内容、修改内容、读取内容

文件夹加密实战指南:用AES-256与i am 007守护数据隐私 数据加密是信息安全的基础技术,其核心原理是通过算法将明文信息转换为无法直接读取的密文,从而确保数据的机密性。AES-256作为目前广泛采用的高级加密标准,提供了极高的理论安全强度,是保护静态数据的基石技术。在工程实践中,文件夹加密工具将这一技术价值转化为用户友好的解决方案,解决了个人电脑、移动存储设备中敏感文件(如工作文档、私人照片)的防窥探需求。特别是在共用电脑、设备送修等场景下,它能有效防止通过物理接触导致的非授权访问。本文以热门的“i am 007”工具为例,深入解析其基于AES-256算法的容器式加 阅读详情

这几天做了一个Android关于文件及文件夹相关操作的软件,自己就总结写了一个关于文件创建、遍历、删除、重命名、复制拷贝、添加内容、修改内容、读取内容的工具类,方便以后快速的对文件进行一些简单操作,使用时可直接复制到代码中作为一个工具类。

/**
 * author : smile
 * Created by PC on 2017/5/10.
 */

public class FileUtils {
    
    private static final String TAG = "FileUtils";

    /**
     * 创建文件
     *
     * @param filePath 文件地址
     * @param fileName 文件名
     * @return
     */
    public static boolean createFile(String filePath, String fileName) {

        String strFilePath = filePath + fileName;

        File file = new File(filePath);
        if (!file.exists()) {
            /**  注意这里是 mkdirs()方法  可以创建多个文件夹 */
            file.mkdirs();
        }

        File subfile = new File(strFilePath);

        if (!subfile.exists()) {
            try {
                boolean b = subfile.createNewFile();
                return b;
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            return true;
        }
        return false;
    }

    /**
     * 遍历文件夹下的文件
     *
     * @param file 地址
     */
    public static List<File> getFile(File file) {
        List<File> list = new ArrayList<>();
        File[] fileArray = file.listFiles();
        if (fileArray == null) {
            return null;
        } else {
            for (File f : fileArray) {
                if (f.isFile()) {
                    list.add(0, f);
                } else {
                    getFile(f);
                }
            }
        }
        return list;
    }

    /**
     * 删除文件
     *
     * @param filePath 文件地址
     * @return
     */
    public static boolean deleteFiles(String filePath) {
        List<File> files = getFile(new File(filePath));
        if (files.size() != 0) {
            for (int i = 0; i < files.size(); i++) {
                File file = files.get(i);

                /**  如果是文件则删除  如果都删除可不必判断  */
                if (file.isFile()) {
                    file.delete();
                }

            }
        }
        return true;
    }


    /**
     * 向文件中添加内容
     *
     * @param strcontent 内容
     * @param filePath   地址
     * @param fileName   文件名
     */
    public static void writeToFile(String strcontent, String filePath, String fileName) {
        //生成文件夹之后,再生成文件,不然会出错
        String strFilePath = filePath + fileName;
        // 每次写入时,都换行写

        File subfile = new File(strFilePath);


        RandomAccessFile raf = null;
        try {
            /**   构造函数 第二个是读写方式    */
            raf = new RandomAccessFile(subfile, "rw");
            /**  将记录指针移动到该文件的最后  */
            raf.seek(subfile.length());
            /** 向文件末尾追加内容  */
            raf.write(strcontent.getBytes());

            raf.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 修改文件内容(覆盖或者添加)
     *
     * @param path    文件地址
     * @param content 覆盖内容
     * @param append  指定了写入的方式,是覆盖写还是追加写(true=追加)(false=覆盖)
     */
    public static void modifyFile(String path, String content, boolean append) {
        try {
            FileWriter fileWriter = new FileWriter(path, append);
            BufferedWriter writer = new BufferedWriter(fileWriter);
            writer.append(content);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取文件内容
     *
     * @param filePath 地址
     * @param filename 名称
     * @return 返回内容
     */
    public static String getString(String filePath, String filename) {
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(new File(filePath + filename));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        InputStreamReader inputStreamReader = null;
        try {
            inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }
        BufferedReader reader = new BufferedReader(inputStreamReader);
        StringBuffer sb = new StringBuffer("");
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line);
                sb.append("\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    /**
     * 重命名文件
     *
     * @param oldPath 原来的文件地址
     * @param newPath 新的文件地址
     */
    public static void renameFile(String oldPath, String newPath) {
        File oleFile = new File(oldPath);
        File newFile = new File(newPath);
        //执行重命名
        oleFile.renameTo(newFile);
    }


    /**
     * 复制文件
     *
     * @param fromFile 要复制的文件目录
     * @param toFile   要粘贴的文件目录
     * @return 是否复制成功
     */
    public static boolean copy(String fromFile, String toFile) {
        //要复制的文件目录
        File[] currentFiles;
        File root = new File(fromFile);
        //如同判断SD卡是否存在或者文件是否存在
        //如果不存在则 return出去
        if (!root.exists()) {
            return false;
        }
        //如果存在则获取当前目录下的全部文件 填充数组
        currentFiles = root.listFiles();

        //目标目录
        File targetDir = new File(toFile);
        //创建目录
        if (!targetDir.exists()) {
            targetDir.mkdirs();
        }
        //遍历要复制该目录下的全部文件
        for (int i = 0; i < currentFiles.length; i++) {
            if (currentFiles[i].isDirectory())//如果当前项为子目录 进行递归
            {
                copy(currentFiles[i].getPath() + "/", toFile + currentFiles[i].getName() + "/");

            } else//如果当前项为文件则进行文件拷贝
            {
                CopySdcardFile(currentFiles[i].getPath(), toFile + currentFiles[i].getName());
            }
        }
        return true;
    }


    //文件拷贝
    //要复制的目录下的所有非子目录(文件夹)文件拷贝
    public static boolean CopySdcardFile(String fromFile, String toFile) {

        try {
            InputStream fosfrom = new FileInputStream(fromFile);
            OutputStream fosto = new FileOutputStream(toFile);
            byte bt[] = new byte[1024];
            int c;
            while ((c = fosfrom.read(bt)) > 0) {
                fosto.write(bt, 0, c);
            }
            fosfrom.close();
            fosto.close();
            return true;

        } catch (Exception ex) {
            return false;
        }
    }

}


对文件操作不要忘记添加下面这个权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


还有就是关于文件路径的一些知识点,也写在这篇博客里面吧。

String path=Environment.getExternalStorageDirectory().getPath();

这个path一般都是SD卡下的根目录。

String path1=getFilesDir().getPath();

  这个path一般是 /data/data/包名/files 。


以上就是自己总结的关于文件的一些简单操作,楼主以后用到什么还会继续往上面添加。

Android存储访问框架SAF:原理、API详解与工程实践 在Android应用开发中,文件系统访问是基础且关键的技术环节。传统基于文件路径的直接访问方式存在安全漏洞和权限滥用问题,其核心缺陷在于缺乏精细的访问控制。Android系统为此引入了基于URI的内容提供者模型,通过统一的资源标识机制实现安全可控的文件访问。Storage Access Framework(SAF)正是这一理念的工程实现,它采用基于用户意图的访问模型,通过系统级文件选择器让用户精确授权特定文件或目录。该框架的技术价值在于解决了跨应用文件共享的安全性与标准化问题,同时统一了本地存储与云端服务的 阅读详情

相关推荐

使用Infini-Cloud实现Zotero全平台免费同步:告别300MB限制

文献管理是现代学术研究的基础环节,其核心在于对参考文献、笔记和PDF附件等元数据进行高效组织与调用。传统单机存储模式存在数据孤岛问题,无法满足多设备协同工作的需求。云同步技术通过将数据实时备份至云端并在多终端间保持一致,解决了跨平台访问的痛点,其技术价值在于保障数据安全与提升工作流连续性。在应用场景上,研究人员常在办公室、家庭和移动场景中切换设备处理文献。本文以Zotero文献管理软件为例,结合Infini-Cloud网盘,详细解析如何通过第三方同步方案构建稳定、免费的全平台同步工作流,其中涉及数据目录迁移

weixin_33672400的博客 844

Android文件基本操作(创建文件(夹)、复制文件(夹)、设置文件访问权限)

Android文件基本操作一、创建文件夹和文件二、复制文件三、设置文件的访问权限 一、创建文件夹和文件 1、创建文件夹 // 获取当前包名的files路径:/data/user/0/com.exa.myapplication/files val PATH = this.filesDir.absolutePath // 创建src目录和dst目录 // 【注】需要有PATH目录的权限才能创建子目录 // 若PATH文件夹权限为root权限,则

okk 1万+

Android 7.0+ HTTPS抓包实战:OpenSSL计算证书哈希与系统证书安装

HTTPS协议通过数字证书建立加密通信,其核心机制是证书链验证,确保数据传输的机密性与完整性。在移动安全测试与开发调试中,中间人抓包是分析网络流量的关键技术,而Android系统自7.0版本起调整了证书信任模型,默认仅信任系统预置CA证书,这为抓包工具如Fiddler、Charles的部署带来了挑战。要突破此限制,需将抓包工具的根证书安装为系统证书,其关键在于理解Android系统证书的命名规则——基于证书公钥的SHA-1哈希值(前8位十六进制字符)命名。这通常需借助OpenSSL工具链进行计算与格式转换,

weixin_34054931的博客 354

java中删除文件夹或文件工具类

 [java] view plaincopyprint? import java.io.File;      public class DelFileOrFolderUtil   {   //删除文件夹   //param folderPath 文件夹完整绝对路径           public static void delFolder

yuyelisten的专栏 933

Android 文件复制功能实现

在 Android 开发中,我们经常需要实现文件的复制功能,即将一个文件的内容复制到另一个文件中。上述代码示例提供了一种简单的文件复制实现方式,但在实际的应用中,还可以根据具体需求进行功能扩展和优化。需要注意的是,为了在 Android 应用中进行文件操作,你可能需要在 AndroidManifest.xml 文件中添加适当的权限声明,例如读取和写入外部存储器的权限。然后,我们使用一个字节数组作为缓冲区,通过循环读取源文件的内容,并将其写入目标文件中。对象来读取源文件的内容,并创建了一个。

ByteWhizX的博客 776

Android文件复制功能实现

最后,需要注意的是,在Android 10及以上的版本中,由于分区存储的限制,直接访问外部存储路径可能会导致权限问题。在上述代码中,我们在按钮的点击事件中调用了FileUtils类中的copyFile()方法,并传入源文件路径和目标文件路径。在Android开发中,经常需要实现文件复制功能,例如将一个文件从一个位置复制到另一个位置。通过封装复制操作的工具类,我们可以方便地在应用中进行文件复制操作。希望本文对你有所帮助!接下来,我们可以创建一个名为FileUtils的工具类,用于封装文件复制相关的功能。

CodeSpark的博客 1047

Android 关于文件及文件夹的创建 、删除、重命名、复制拷贝

package com.example.administrator.myapplication.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx...

ZhangJiqun&191cm&85kg 2931

Android文件操作指南:文件重命名和删除详解

无论是文件重命名还是删除,都需要创建File对象,并根据需求执行相应的操作。在实际开发中,务必注意处理异常情况,例如文件不存在或者操作失败等,以保证文件操作的安全性和可靠性。在执行文件删除操作之前,我们需要判断文件是否存在,避免对不存在的文件进行删除操作。与文件重命名相似,delete()方法也返回一个布尔值,表示文件是否成功删除。首先,我们需要创建一个File对象,指定要重命名的文件路径。同样地,首先需要创建一个File对象,指定要删除的文件路径。接下来,使用新的文件名创建一个新的File对象。

ByteKnight的博客 1489

复制黏贴重命名删除 android代码,Android 关于文件及文件夹的创建 、删除、重命名、复制拷贝...

package com.example.administrator.myapplication.util;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException...

weixin_29341747的博客 223

PHP证书图片生成

$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色

4035

海康威视嵌入式最全面试题及参考答案(3万字长文)

主营业务:提供包括前端摄像头、后端存储设备、显示控制设备等在内的全方位视频监控解决方案。市场地位:在全球范围内享有较高的市场份额,在安防领域具有较强的竞争力。技术创新:持续投入研发,拥有多项核心技术和专利,特别是在视频处理算法、人工智能等方面取得了显著成果。社会责任:积极参与公共安全项目,为智慧城市、交通管理等领域提供技术支持和服务。国际业务:除了国内市场外,海康威视的产品和服务也销往全球多个国家和地区。面向对象编程。

大模型大数据攻城狮的专栏 1761

Android 9.0 MTP模式下实现指定文件夹只读访问控制

在Android系统开发中,文件访问控制是保障数据安全的核心机制。其原理在于通过权限管理和协议层拦截,对文件操作请求进行校验与过滤。这项技术的价值在于,它能在不修改底层文件系统权限的前提下,实现细粒度的访问策略,尤其适用于需要保护关键数据的场景。例如,在博物馆信息终端、企业演示设备等公共或专用设备中,防止用户通过USB连接误删或篡改重要资料。本文聚焦于MTP(媒体传输协议)这一常见文件传输方式,深入解析如何在Android 9.0的AOSP源码中,通过修改MediaProvider组件,实现对特定文件夹的只

weixin_33671935的博客 390

华为OD机试:查找接口成功率最优时间段 (C/C++/Py/Java/JS/GO)

华为OD机试双机位C卷 查找接口成功率最优时间段,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。

qq_45776114的博客 4686

android工具类怎么写,用kotlin写了一些android常用的一些工具类

最近在学习kotlin语言,写了一些android常用的工具类FileUtils.kt 文件操作类创建多级文件目录 mkDir(dirPath: String)创建文件 creatFile(filePath: String)删除文件 delFile(filepath: File)删除删除文件夹 delDir(dirpath: String)修改SD卡上的文件或目录名 renameFile(oldF...

weixin_42576186的博客 772

[系统安全] 十七.Windows PE病毒概念、分类及感染方式详解

作者前文介绍了PE文件格式,熟悉各种PE编辑查看工具,针对目标EXE程序新增对话框等;这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件及操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了《软件安全》视频、安全网站和参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

杨秀璋的专栏 1万+

从 Junior 到 Lead:ABAP 开发者进阶路线图与真实项目练级法

本文拆解了ABAP工程师从初级到高级的成长路径,强调能力提升依赖于可复用经验的积累。对于初级开发者,建议夯实ABAP Dictionary、内表处理和数据库思维三大基础,培养数据流与规则层的结构化思维,并逐步掌握面向对象编程。中级阶段应注重代码可维护性,通过单元测试和Clean ABAP规范提升工程质量。文章指出,ABAP开发者需要学会筛选学习重点,建立知识地图,并重视团队协作中的代码可读性。关键在于将碎片知识整合为可迁移的模型,而非盲目追求新技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

文件读取和写入:打开本地管理器选择txt

申明的变量: private String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; private final static int RESULT_SUCCESS = 3; private String read...

芒果蜜桃π 856

实现两端固支梁热力耦合的有限元分析

在本文中,我们将使用Matlab实现两端固支梁的热力耦合有限元分析。我们假设梁的材料是均匀的,梁的截面积为1,长度为1,两端固支,且受到均匀分布的热荷载。接下来,我们需要组装全局刚度矩阵和热传导矩阵。对于两个相邻的元素,它们共享一个节点,因此需要使用连接矩阵将局部矩阵组装成全局矩阵。接下来,我们需要定义元素刚度矩阵和热传导矩阵。然后,我们需要定义载荷向量。然后,我们需要定义边界条件。在这个例子中,梁的两端固支,因此我们需要将两端节点的位移限制为0。最后,我们需要解决线性方程组,得到节点的位移和温度分布。

CyberSparkZ的博客 394

Android Studio SDK配置错误排查:从“Please select android sdk”到环境根治

在Android应用开发中,构建系统是项目编译和打包的核心引擎,它负责协调代码、资源和依赖项。其工作原理依赖于精准的环境配置,特别是Android SDK的定位。当Gradle构建工具在项目配置和IDE全局设置中均无法找到有效的SDK路径时,就会触发经典的“Please select android sdk”错误。这一问题的技术价值在于,它迫使开发者深入理解开发环境的地基——SDK管理机制,从而提升环境维护和问题诊断能力。其典型应用场景包括从版本库克隆新项目、多开发环境切换或SDK路径变更后。本文将聚焦于*

weixin_30314813的博客 526

阅文集团大数据面试题及参考答案

在 Flink 中,watermark 是一种用于处理乱序事件时间的机制。实现接口:通常需要实现 AssignerWithPeriodicWatermarks 或 AssignerWithPunctuatedWatermarks 接口。前者会周期性地生成 watermark,后者则是基于某些特定事件来生成 watermark ,比如接收到某个特定值的消息时。定义位置:可以在数据源处或者在流处理的中间操作中定义 watermark。在数据源定义时,能更精准地根据数据的产生特性设置 watermark;

大模型大数据攻城狮的专栏 1088

PointNet++改进策略 :模块改进 | x-Conv | PointCNN, 结合局部结构与全局排列提升模型性能

这篇论文介绍了一种名为PointCNN的方法,旨在从点云(point cloud)数据中学习特征。传统卷积神经网络(CNN)在处理规则网格数据(如图像)时非常有效,但由于点云是无序且不规则的,直接在其上应用卷积操作会导致形状信息丢失,并对点的排列顺序敏感。为了解决这一问题,论文提出了一种X-Conv操作。该方法通过学习一种来重新排列点云中的点并加权输入特征。然后,将典型的卷积操作应用于转换后的特征。这种方法将传统的 CNN 扩展到点云特征学习,并命名为PointCNN。

u012901740的博客 2300

Android的一些干货以及Android Studio的一些实用小技巧(持续更新)

干货/Android知识

Last Dance 1963

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【SSM分布式架构电商项目-30】MySQL数据库设置读写分离

背景 我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案, 其中一个是主库,负责写入数据,我们称之为:写库; 其它都是从库,负责读取数据,我们称之为:读库; 那么,对我们的要求是: 1、 读库和写库的数据一致; 2、 写数据必须写到写库; 3、 读数据必须到读库; 安装两个mysql 我们装的是绿色版的My...

C. 811

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

从粉丝应援到专业记录:全链路活动内容生产与自动化发布技术方案

这次我们来看一个关于曾沛慈粉丝应援活动的记录项目。从标题“曾沛慈|20260627 pets看无人机应援”来看,这并非一个技术工具或开源模型,而更像是一次粉丝应援活动的记录、分享或纪念性内容。对于技术博客而言,我们的重点不是讨论活动本身,而是探讨如何利用技术手段来高效、高质量地记录、处理、传播和归档这类活动内容。本文将聚焦于从技术角度拆解一个完整的活动记录与内容生产流程,涵盖从现场拍摄、素材管理、后期处理到多渠道分发的全链路,并提供一套可落地的技术方案与工具链。 对于内容创作者、粉丝站管理者或活动记录者而言

weixin_34344403的博客 561

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Android 自定义带点击效果的圆角按钮
下一篇: Android ActionBar 转Toolbar 出现的一些问题总结
谦行
博客等级 码龄11年 182粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值