Android FileUtil(android文件工具类)
android开发和Java开发差不了多少,也会有许多相同的功能。像本文提到的文件存储,在Java项目和android项目里面用到都是相同的。只是android开发的一些路径做了相应的处理。
下面就是在项目中用到的一个文件存储和读取类。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import android.content.Context;
import android.os.Environment;
import android.text.TextUtils; /**
* 文件工具类
*
* @version v 1.0.0 2015-8-22 下午10:21:03 xl Exp $
*/
public class FileUtils {
public File ImgCachePath;
public File ImgSavePath;
public File ImgSharePath;
public File ApkSavePath;
public File LogSavePath;
public File ImgCapTempPath;
public File ImgCapCutPath;
public File ImgCacheDefaultPath; public static String APP_DATA_ROOT_PATH;
public static String IMG_SAVE_PATH;
public static String IMG_SHARE_PATH;
public static String APK_INSTALL_PATH;
public static String APK_LOG_PATH;
public static String IMG_SAVE_PATH_CAP_TEMP;
public static String IMG_SAVE_PATH_CAP_CUT;
public static String IMG_CACHE_XUTILS_SDCARD_PATH;
public static String IMG_CACHE_XUTILS_DEFAULT_PATH;
public static String FINAL_IMAGE_PATH;
public static String FINAL_TEMP_PATH;
public static String SDPATH; public File XLPath;
public Context mContext;
private static FileUtils mInstance; public FileUtils(Context context) {
mContext = context;
} /**
* 创建文件工具类示例
*
* @param context
* 上下文
* @return
*/
public static synchronized FileUtils createInstance(Context context) {
if (mInstance == null) {
mInstance = new FileUtils(context);
mInstance.initPath();
}
return mInstance;
} /**
* 获取文件工具类实例
*
* @return
*/
public static synchronized FileUtils getInstance() {
if (mInstance == null)
throw new IllegalStateException("FileUtil must be create by call createInstance(Context context)");
return mInstance;
} /**
* 初始化本地缓存路径
*/
public void initPath() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
SDPATH = Environment.getExternalStorageDirectory() + "/";
IMG_SAVE_PATH = SDPATH + "**/images/save/";
IMG_SHARE_PATH = SDPATH + "**/images/share/";
APK_INSTALL_PATH = SDPATH + "**/app/";
APK_LOG_PATH = SDPATH + "**/log/";
IMG_SAVE_PATH_CAP_TEMP = SDPATH + "**/images/save/capture/**_temp/";
IMG_SAVE_PATH_CAP_CUT = SDPATH + "**/images/save/capture/**_cut/";
IMG_CACHE_XUTILS_SDCARD_PATH = SDPATH + "**/images/cache/";// 用于保存图片缓存吧
IMG_CACHE_XUTILS_DEFAULT_PATH = SDPATH + "Android/data/" + mContext.getPackageName() + "/cache/imgCache/"; APP_DATA_ROOT_PATH = getAppPath() + "**/";
FINAL_IMAGE_PATH = APP_DATA_ROOT_PATH + "images/";
FINAL_TEMP_PATH = APP_DATA_ROOT_PATH + "temp/"; XLPath= new File(APP_DATA_ROOT_PATH);
if (!**.exists()) {
XLPath.mkdirs();
}
XLPath = new File(FINAL_IMAGE_PATH);
if (!XLPath.exists()) {
XLPath.mkdirs();
} XLPath = new File(FINAL_TEMP_PATH);
if (!XLPath.exists()) {
XLPath.mkdirs();
} // 拍照图片保存地址
ImgCapTempPath = new File(IMG_SAVE_PATH_CAP_TEMP);
if (!ImgCapTempPath.exists()) {
ImgCapTempPath.mkdirs();
}
// 裁剪后图片保存地址
ImgCapCutPath = new File(IMG_SAVE_PATH_CAP_CUT);
if (!ImgCapCutPath.exists()) {
ImgCapCutPath.mkdirs();
}
// 图片保存、缓存地址
ImgSavePath = new File(IMG_SAVE_PATH);
if (!ImgSavePath.exists()) {
ImgSavePath.mkdirs();
}
// 分享图片的临时保存路径
ImgSharePath = new File(IMG_SHARE_PATH);
if (!ImgSharePath.exists()) {
ImgSharePath.mkdirs();
}
// 检测更新时保存路径
ApkSavePath = new File(APK_INSTALL_PATH);
if (!ApkSavePath.exists()) {
ApkSavePath.mkdirs();
}
// 异常保存路径
LogSavePath = new File(APK_LOG_PATH);
if (!LogSavePath.exists()) {
LogSavePath.mkdirs();
}
ImgCachePath = new File(IMG_CACHE_XUTILS_SDCARD_PATH);
if (!ImgCachePath.exists()) {
ImgCachePath.mkdirs();
}
ImgCacheDefaultPath = new File(IMG_CACHE_XUTILS_DEFAULT_PATH);
if (!ImgCacheDefaultPath.exists()) {
ImgCacheDefaultPath.mkdirs();
} } } private String getAppPath() {
LogCatLog.i(TAG, "MyApplication-getAppPath():" + mContext.getFilesDir().getParent());
return mContext.getFilesDir().getParent() + "/";
} /**
* [将文件保存到SDcard方法]<BR>
* [功能详细描述]
*
* @param fileName
* @param inStream
* @throws IOException
*/
public boolean saveFile2SDCard(String fileName, byte[] dataBytes) throws IOException {
boolean flag = false;
FileOutputStream fs = null;
try {
if (!TextUtils.isEmpty(fileName)) {
File file = newFileWithPath(fileName.toString());
if (file.exists()) {
file.delete();
LogCatLog.w(TAG, "httpFrame threadName:" + Thread.currentThread().getName() + " 文件已存在 则先删除: "
+ fileName.toString());
}
fs = new FileOutputStream(file);
fs.write(dataBytes, 0, dataBytes.length);
fs.flush();
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fs != null)
fs.close();
} return flag;
} /**
* 创建一个文件,如果其所在目录不存在时,他的目录也会被跟着创建
*
* @author songdiyuan
* @date 2015-8-24
* @return
*/
public File newFileWithPath(String filePath) {
if (TextUtils.isEmpty(filePath)) {
return null;
} int index = filePath.lastIndexOf(File.separator); String path = "";
if (index != -1) {
path = filePath.substring(0, index);
if (!TextUtils.isEmpty(path)) {
File file = new File(path.toString());
// 如果文件夹不存在
if (!file.exists() && !file.isDirectory()) {
boolean flag = file.mkdirs();
if (flag) {
LogCatLog.i(TAG, "httpFrame threadName:" + Thread.currentThread().getName() + " 创建文件夹成功:"
+ file.getPath());
} else {
LogCatLog.e(TAG, "httpFrame threadName:" + Thread.currentThread().getName() + " 创建文件夹失败:"
+ file.getPath());
}
}
}
}
return new File(filePath);
} /**
* 判断文件是否存在
*
* @param strPath
* @return
*/
public boolean isExists(String strPath) {
if (strPath == null) {
return false;
} final File strFile = new File(strPath); if (strFile.exists()) {
return true;
}
return false; }
}
使用方法:① 判断文件是否存在
/**
* 保存获取的 软件信息,设备信息和出错信息保存在SDcard中
*
* @param context
* @param ex
* @return
*/
private String savaInfoToSD(Context context, Throwable ex) {
String fileName = null;
StringBuffer sb = new StringBuffer(); for (Map.Entry<String, String> entry : obtainSimpleInfo(context)
.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
sb.append(key).append(" = ").append(value).append("\n");
} sb.append(obtainExceptionInfo(ex)); try {
fileName = FileUtils.APK_LOG_PATH
+ paserTime(System.currentTimeMillis()) + ".log";
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(sb.toString().getBytes());
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
} return fileName; }
② 使用方法:往指定路径下存储文件
String fileName = "***" + " " + time + "[在这里输入要存储的文件类型eg:.jpg/.pdf/.doc/.txt....]";
String path = FileUtils.APK_INSTALL_PATH + fileName;
FileUtils.getInstance().saveFile2SDCard(path, ArchData);//由于该方法是将文件已二进制数组的方式将数据存储进去,所以第二个参数里面是一个二进制数组
这个工具类里面还有其他的许多方法在工具类里面都已经进行了注释。
Android FileUtil(android文件工具类)的更多相关文章
- android -------- 压缩图片文件工具类
项目中常常遇到文件压缩问题,上传文件大小限制 今天简单的分享一点干货,文件压缩,图片压缩,压缩Bitmap 主要通过尺寸压缩和质量压缩,以达到清晰度最优 效果图 源码地址: https://githu ...
- Android开发调试日志工具类[支持保存到SD卡]
直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...
- Android开源项目大全 - 工具类
主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...
- wemall app商城源码android开发MD5加密工具类
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...
- Android经常使用的工具类
主要介绍总结的Android开发中经常使用的工具类,大部分相同适用于Java. 眼下包含HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Pr ...
- 关于TornadoFx和Android的全局配置工具类封装实现及思路解析
原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...
- Android弹出Toast工具类总结
Android弹出Toast工具类总结,包括系统自带的,也包括自定义的. public class ToastUtil { public ToastUtil() { } public static T ...
- Android 中替代 sharedpreferences 工具类的实现
Android 中替代 sharedpreferences 工具类的实现 背景 想必大家一定用过 sharedpreferences 吧!就我个人而言,特别讨厌每次 put 完数据还要 commit. ...
- 获取 Android APP 版本信息工具类(转载)
获取 Android APP 版本信息工具类 获取手机APP版本信息工具类 1.获取版本名称 2.获取版本号 3.获取App的名称 package com.mingyue.nanshuibeidiao ...
随机推荐
- Java基础知识强化之集合框架笔记24:ArrayList存储自定义对象并遍历
1. ArrayList存储自定义对象并遍历 2. 代码示例: Student.java,如下: package cn.itcast_01; public class Student { privat ...
- cookingk配置项中的chunk:true含义
学习cooking,查看中文文档,发现有个配置chunk: true, 不明白具体含义,于是根据注释,找到了相关代码, 即chunk: true等同于以下代码: var webpackConfig = ...
- HDFS的Java客户端操作代码(查看HDFS下所有的文件或目录)
1.查看HDFS下所有的文件或目录 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.h ...
- 2.添加键盘钩子。向进程中注入dll
学习笔记 1.首先要建立mfc的动态链接库.在def文件中放入要导出的函数名. 2.添加函数如下 //安装钩子 //HHOOK SetWindowsHookEx( // int idHook,//钩子 ...
- asp.net 实现对xml文件的 读取,添加,删除,修改
用于修改站内xml文件 已知有一个XML文件(bookstore.xml)如下:<?xml version="1.0" encoding="gb2312" ...
- CI 笔记(easyui js命令)
1. 两种方式加载easyui,一是用class自动渲染,一种是js.建议js. 2. 参考李炎恢的easyui的视频教程.最好的一个视频,对于easyui.
- 什么是DOM
什么DOM,简单的说.DOM是一套对文档的内容进行抽象和概念化的方法. 在现实世界里,人们对所谓的“世界对象模型”都不会陌生.例如,当用“汽车”.房子 和树等名词
- 【原】ios tableViewCell 自适应高度
原文:http://www.cnblogs.com/A--G/p/4819051.html 前言:之前在做一个类似微博的小需求时候,用table view实现了微博文字和图片等等的基本展示,由于文字和 ...
- ios里面如何压缩图片
在iOS里面,压缩图片跟在其他环境里面差不多,都和累死, 就是对当前图片从新画图,制定一个尺寸的问题 UIImage* image = [UIImage imageNamed:@"cat.j ...
- Junit4_单元测试
不多说,直接练习学习. 1.将Junit4单元测试包引入项目:项目右键——“属性”,选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Libr ...