版权声明:本文为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

最新文章

  1. 《DSP using MATLAB》示例Example5.14
  2. ado.net 用c#与数据库连接实现增删改查
  3. Java系列:《Java核心技术 卷一》学习笔记,chapter11 记录日志
  4. Visual Studio快捷键不能使用解决办法
  5. mybatis多对一关联的两种方式
  6. #linux包之psmisc之fuser命令
  7. Install_ruby
  8. 你以为PHP那么好自定义升级?
  9. nginx日志管理与限速
  10. memcached预热失败
  11. tomcat启动不了,内存溢出
  12. [poj1644]放苹果
  13. 记录一个EF连接查询的异常:the entity or complex type &#39;x&#39; cannot be constructed in a linq to entities query
  14. vue2.0环境安装
  15. C#编程的语法积累(一)
  16. SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)
  17. SQLServer2005重建索引前后对比【转】
  18. sql server数据库中char、nchar、varchar、nvarchar的选择
  19. js之点击值发生变化
  20. android studio升级方法

热门文章

  1. Selenium 指定浏览器位置
  2. Selenium 3 没办法启用指定的Firefox Profile
  3. 关于Kafka __consumer_offests的讨论
  4. sonyflake.go
  5. bzoj5252 [2018多省省队联测]林克卡特树
  6. BZOJ_1833_[ZJOI2010]count 数字计数_数位DP
  7. 斜率优化入门学习+总结 Apio2011特别行动队&amp;Apio2014序列分割&amp;HZOI2008玩具装箱&amp;ZJOI2007仓库建设&amp;小P的牧场&amp;防御准备&amp;Sdoi2016征途
  8. 处理php出现default timezone抖动的问题
  9. GraphQL 入门介绍
  10. TensorFlow之CNN:运用Batch Norm、Dropout和早停优化卷积神经网络