zoukankan      html  css  js  c++  java
  • FileUtils【获取SD卡根目录、读写文件、移动、复制、删除文件、获取文件名、后缀名操作类】【不建议使用这个工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处!

    前言

    封装了获取SD卡根目录路径、以及对文件读写、获取文件名等相关操作。

    因为需要用到android.permission.READ_EXTERNAL_STORAGE权限,所以依赖Android6.0运行时权限(基于RxPermission开源库)》。

    效果图

     

    代码分析

    较常用的应该是获取SD卡根目录路径、获取文件名、创建目录操作。

    使用步骤

    一、项目组织结构图

    注意事项:

    1、  导入类文件后需要change包名以及重新import R文件路径

    2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

    二、导入步骤

    将fileutil包复制到项目中

    创建一个包含以下代码的MyApplication.java(自定义的Application子类)

    package com.why.project.fileutilsdemo;
    
    import android.app.Application;
    import android.content.Context;
    
    /**
     * Created by HaiyuKing
     * Used 自定义Application【系统上下文】
     */
    
    public class MyApplication extends Application {
        /**系统上下文*/
        private static Context mAppContext;
    
        @Override
        public void onCreate() {
            super.onCreate();
            mAppContext = getApplicationContext();
        }
    
        /**获取系统上下文:用于FileUtils工具类、Utility类*/
        public static Context getAppContext()
        {
            return mAppContext;
        }
    
    }

     在AndroidManifest.xml中声明这个MyApplication并添加权限

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.why.project.fileutilsdemo">
    
        <!-- ======================(FileUtil)========================== -->
        <!-- 向SD卡写入数据权限 -->
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            android:name=".MyApplication">
            <activity android:name=".activity.MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
    
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    添加运行时权限的处理(本demo中采用的是修改targetSDKVersion=22)

    在build.gradle中导入第三方库:org.apache.httpcomponents:httpcore:4.4.4

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.3"
        defaultConfig {
            applicationId "com.why.project.fileutilsdemo"
            minSdkVersion 15
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
    
        //FileUtils
        compile 'org.apache.httpcomponents:httpcore:4.4.4'
    
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:25.3.1'
        testCompile 'junit:junit:4.12'
    }

    对于Eclipse开发环境,在libs目录下导入httpcore-4.4.4.jar包即可。

    链接:http://pan.baidu.com/s/1pKUzNiN 密码:xa8c

    三、使用方法

    private void initEvents() {
            //获取SD卡路径
            tv_getSdPath.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String sdPath = FileUtils.getSDPath();
                    Log.w(TAG,"sdPath="+sdPath);
                }
            });
    
            //创建目录
            tv_makeFolders.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String fileForderPath = FileUtils.getSDPath() + File.separator + "fileUtilDir" + File.separator;
                    Log.w(TAG,"fileForderPath="+fileForderPath);
                    boolean makeFolderState = FileUtils.makeFolders(fileForderPath);
                    Log.w(TAG,"makeFolderState="+makeFolderState);
                }
            });
    
            //将字符串写入文件
            tv_writeFile.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String filePath = FileUtils.getSDPath() + File.separator + "fileUtilDir" + File.separator + "file.txt";
                    Log.w(TAG,"filePath="+filePath);
                    String content = "将字符串内容添加到文本文件中";
                    boolean writeFileState = FileUtils.writeFile(filePath,content);
                    Log.w(TAG,"writeFileState="+writeFileState);
                }
            });
    
            //读取文件
            tv_readFile.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String filePath = FileUtils.getSDPath() + File.separator + "fileUtilDir" + File.separator + "file.txt";
                    Log.w(TAG,"filePath="+filePath);
                    String readContent = FileUtils.readFile(filePath);
                    Log.w(TAG,"readContent="+readContent);
                }
            });
    
            //获取文件名(不带后缀)
            tv_getFileNameWithoutExtension.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String filePath = FileUtils.getSDPath() + File.separator + "fileUtilDir" + File.separator + "file.txt";
                    Log.w(TAG,"filePath="+filePath);
                    String fileNameWithoutExtension = FileUtils.getFileNameWithoutExtension(filePath);
                    Log.w(TAG,"fileNameWithoutExtension="+fileNameWithoutExtension);
                }
            });
    
            //获取文件名(带后缀)
            tv_getFileName.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String filePath = FileUtils.getSDPath() + File.separator + "fileUtilDir" + File.separator + "file.txt";
                    Log.w(TAG,"filePath="+filePath);
                    String fileName = FileUtils.getFileName(filePath);
                    Log.w(TAG,"fileName="+fileName);
                }
            });
    
            //获取后缀名
            tv_getFileExtension.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String filePath = FileUtils.getSDPath() + File.separator + "fileUtilDir" + File.separator + "file.txt";
                    Log.w(TAG,"filePath="+filePath);
                    String fileExtension = FileUtils.getFileExtension(filePath);
                    Log.w(TAG,"fileExtension="+fileExtension);
                }
            });
    
            //获取文件大小
            tv_getFileSize.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String filePath = FileUtils.getSDPath() + File.separator + "fileUtilDir" + File.separator + "file.txt";
                    Log.w(TAG,"filePath="+filePath);
                    long fileSize = FileUtils.getFileSize(filePath);
                    Log.w(TAG,"fileSize="+fileSize);
                }
            });
    
            //删除文件
            tv_deleteFileRecursion.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String filePath = FileUtils.getSDPath() + File.separator + "fileUtilDir" + File.separator + "file.txt";
                    Log.w(TAG,"filePath="+filePath);
                    FileUtils.deleteFileRecursion(filePath);
    
                }
            });
    
            //获取APP的文件路径
            tv_getAppFilePath.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String appFilePath = FileUtils.getAppFilePath();
                    Log.w(TAG,"appFilePath="+appFilePath);
                }
            });
    
        }

    混淆配置

    #=====================httpcore=====================
    #android Studio环境中不需要,eclipse环境中需要
    #-libraryjars libs/httpcore-4.4.4.jar
    -dontwarn org.apache.http.**
    -keep class org.apache.http.**{*;}

    参考资料

    Android高效获取指定类型文件,获取文件不求人!

    android 媒体库数据更新解决办法总结

    项目demo下载地址

     https://github.com/haiyuKing/FileUtilsDemo

  • 相关阅读:
    了解DockerFile
    容器数据卷
    Docker镜像讲解
    Java语法学习笔记:多态
    决策树之分类与回归
    python数据分析回归算法
    python之斐波那契序列算法的总结
    pandas 关于数据分组和聚合
    pandas中关于数据合并join,merge
    scrapy爬虫之断点续爬,增量爬取,断网急救
  • 原文地址:https://www.cnblogs.com/whycxb/p/7117513.html
Copyright © 2011-2022 走看看