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.**{*;}
参考资料
项目demo下载地址
https://github.com/haiyuKing/FileUtilsDemo
FileUtils【获取SD卡根目录、读写文件、移动、复制、删除文件、获取文件名、后缀名操作类】的更多相关文章
- android 获取sd卡根目录
dir:/storage/emulated/0 也就是 sdcard目录 ====== android 获取sd卡根目录 public String getSDPath(){ File ...
- 【译】如何在 Android 5.0 上获取 SD卡 的读写权限
因为最近项目需要,涉及到 SD卡 的读写操作,然而申请 <!-- 读写权限 --> <uses-permission android:name="android.permi ...
- Android:创建文件或文件夹以及获取sd卡根目录
目录结构: 功能,可以根据录入的目录或者文件夹生成相应的文件或者文件夹 首先需要添加一个权限: <uses-permission android:name="android.permi ...
- Android获取SD卡路径/内存的几种方法
Android获取SD卡路径 本篇将会带领大家学习如何获取android路径的几种常见用法,但在我开始bb之前需要大家清楚android中内存和外存之间的区别,下面进行简短介绍:android中的内存 ...
- 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件
[源码下载] 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件 作者:w ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- MVP+RXJAVA+RecyclerView实现sd卡根目录下的所有文件中的照片加载并显示
初学Rxjava,目前只能遍历加载指定目录下的所有文件夹中的照片,文件夹中如果还嵌套有文件夹目前还没找到实现方法. 先看mvp目录结构: 很抱歉,没有model. 接下来是view层的接口代码和pre ...
- Android 读取手机SD卡根目录下某个txt文件的文件内容
1.先看activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- 获取SD卡中的音乐文件
小编近期在搞一个音乐播放器App.练练手: 首先遇到一个问题.怎么获取本地的音乐文件? /** * 获取SD卡中的音乐文件 * * @param context * @return */ public ...
随机推荐
- scala 访问阿里云oss
我们的数据一天就一个T,数据量不断增大,集群磁盘有限,所以把冷数据放到了oss,偶尔会使用到冷数据,如果使用的时候还的从oss上拉数据这样很浪费时间后来想了个办法可以直接获取到oss上的数据.案例:o ...
- inner join 与 left join 之间的区别
关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在前端以 ...
- MySQL如何优化
对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库--林林总总,但是第一必备技能还应该是MySQL.从LAMP的兴起,到Ma ...
- 在C++中怎么判断一个double型数据的小数点部分是否为零
例:double sf = 123.123: 这里我们怎么判断sf小数点部分是否为零,可以直接用原数减去将sf强制转换后的整数是否为零来判断. if((sf - (int)sf) == 0),则说明s ...
- Dubbo原理和源码解析之服务引用
一.框架设计 在官方<Dubbo 开发指南>框架设计部分,给出了引用服务时序图: 另外,在官方<Dubbo 用户指南>集群容错部分,给出了服务引用的各功能组件关系图: 本文将根 ...
- Java基础-方法重载和方法重写的区别
什么是java方法重载 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) ...
- 原生wcPop.js消息提示框(移动端)、内含仿微信弹窗效果
wcPop.js移动端消息对话框插件是之前的wxPop.js的升级版,优化了js和css,并且新增了仿微信弹窗效果, 是一款含有多种情景模式的原生模态消息对话框代码,可用于替代浏览器默认的alert弹 ...
- #利用openCV裁脸
#利用openCV裁脸import cv2 def draw_rects(img, rects): for x, y, w, h in rects: cv2.rectangle(img, (x, y) ...
- Django文件上传(经典上传方式)
经典文件上传方式 创建URL from django.contrib import admin from django.urls import path from django.conf.urls i ...
- Akka实践一些总结
最近在一些服务中使用了akka,主要用来做异步解耦和本地消息分发(路由),这里简单总结一下用法. 与spring集成 网上有不少集成的例子,要使用到spring的扩展. 我这边没有这样处理,而是简单把 ...