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文件工具类)的更多相关文章

  1. android -------- 压缩图片文件工具类

    项目中常常遇到文件压缩问题,上传文件大小限制 今天简单的分享一点干货,文件压缩,图片压缩,压缩Bitmap 主要通过尺寸压缩和质量压缩,以达到清晰度最优 效果图 源码地址: https://githu ...

  2. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  3. Android开源项目大全 - 工具类

    主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...

  4. wemall app商城源码android开发MD5加密工具类

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...

  5. Android经常使用的工具类

    主要介绍总结的Android开发中经常使用的工具类,大部分相同适用于Java. 眼下包含HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Pr ...

  6. 关于TornadoFx和Android的全局配置工具类封装实现及思路解析

    原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...

  7. Android弹出Toast工具类总结

    Android弹出Toast工具类总结,包括系统自带的,也包括自定义的. public class ToastUtil { public ToastUtil() { } public static T ...

  8. Android 中替代 sharedpreferences 工具类的实现

    Android 中替代 sharedpreferences 工具类的实现 背景 想必大家一定用过 sharedpreferences 吧!就我个人而言,特别讨厌每次 put 完数据还要 commit. ...

  9. 获取 Android APP 版本信息工具类(转载)

    获取 Android APP 版本信息工具类 获取手机APP版本信息工具类 1.获取版本名称 2.获取版本号 3.获取App的名称 package com.mingyue.nanshuibeidiao ...

随机推荐

  1. Weex 标签控件

    1.滚动组件 <template> <scroller> <div repeat="{{list}}"> <text>{{name} ...

  2. OSI 网络七层模型(笔记)

    一直以来我们都在使用着互联网,每天聊着qq,上着淘宝,但是却不了解怎么运行的呢,充满了好奇.今天同过了解来总结一下OSI网络七层模型: 上一张图 OSI (open system interconne ...

  3. instanceof的用法①

    public class typeof1{ private String a="zzw"; public void instance(){ if(a instanceof Stri ...

  4. android 如何解决模块之间的通讯的耦合问题

    使用EventBus http://wuyexiong.github.io/blog/2013/04/30/android-fragment/ http://yunfeng.sinaapp.com/? ...

  5. [转帖]音响及DarBee

    红外与蓝牙的差别 1.距离 红外:对准.直接.1—2米,单对单 红外线可以用你的手机摄像头看到  蓝牙:10米左右,可加强信号,可以绕弯,可以不对准,可以不在同一间房间,链接最大数目可达7个,同时区分 ...

  6. AFNETWORKING tabelView没有reloadData,报错unsupported URL

    Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo=0x7f9dc278aa60 {NSUnde ...

  7. 页面加载完成,但ie进度条一直加载

    页面ajax执行完删除等操作,会刷新当前页面,如果前端框架是左右iframe格式 我的前端页面提示用asyncBox,可能iframe和asyncBox的影响,出现这种情况: 网上大多数的说法是 页面 ...

  8. spring mvc easyui tree 异步加载树

    使用spring mvc 注解 异步加载一棵树 jsp: <ul id="orgInfoTree"></ul> $(function(){ loadOrgT ...

  9. 用jQuery实现瀑布流效果学习笔记

    jQuery一直没系统的学,只知道是js库,封装了好多js函数,方便了开发.以前做过一个原生的图片网站瀑布流效果,超级麻烦,这次用了jQuery方法,瞬间代码浓缩了,只有56行js代码.神奇的让我来把 ...

  10. PHP通过链接获取二进制数据的方法

    function urltoblob($url){ $data = @file_get_contents($url); //如果file得不到数据,则给空值 if(!$data){ $data = & ...