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. Microsoft Windows Server 2008 R2 IIS7.5安装指南

    一.IIS安装步骤: 1.安装Windows Server 2008 R2(见 附录一) 2.配置计算机名称和IP地址(见 附录一) 3.配置成员服务器(见 附录一) 4.点击任务栏上的“服务器管理器 ...

  2. Apache MINA 框架之默认session管理类实现

    DefaultSocketSessionConfig 类 extends AbstractSocketSessionConfig extends AbstractIoSessionConfig imp ...

  3. 委托、 Lambda表达式和事件——Lambda表达式

    /* * 由SharpDevelop创建. * 用户: David Huang * 日期: 2015/7/30 * 时间: 16:32 */ using System; namespace Lambd ...

  4. mvc4+jquerymobile页面加载时无法绑定事件

    问题:在view里写js,在页面第一次加载完成后,无法触发事件, 如:按钮click事件,已经在$(function(){  添加了click });但就是无法触发,必须刷新下才可以. 原因分析: 主 ...

  5. asp.net 自动遍历实体类

    最近做项目需要读取修改前数据库中被修改的数据所有的信息,一开始想要在model层的每个类都写一个函数return一串字符串, 但是由于表太多,实体类数量太大,写出来太浪费时间,所以决定写一个通用的方法 ...

  6. C# 如何创建接口以及使用接口的简单Demo(转载!)

    //No:1  首先,我们要封装一个接口,接口中不要实现具体的方法(说白了这就是一个架子而已!) using System;using System.Collections.Generic;using ...

  7. 在iframe中获取iframe外的对象

    parent.document.getElementById("dom ID"); $($(parent.document.getElementById("video-i ...

  8. mybatis for .net

    MyBatis For .NET学习笔记:开篇 http://chenkai.blog.51cto.com/2023960/763806 MyBatis For .NET学习笔记[2]:配置环境 ht ...

  9. Asp.Net 注册 邮箱激活

    数据库 表的设计 State为用户状态  0为禁用  1为可用  默认为0,下面有个UserGUID,这个字段将来用于激活账户 首先你要写一个表单,验证码神马的,这个我就不写了..直接写处理的 代码在 ...

  10. Windows2003 下 MySQL 数据库每天自动备份

    1. 环境: windows server 2003 + Apache 2.0 + PHP5 + MySQL 4.0.26 . 2. 假设 PHP 安装目录为 D:/php ,MySQL 安装目录为  ...