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. vim 缩写abbreviation

    创建 :ab abbreviation pharse 取消 :unab abbreviation 缩写使用 insert模式下输入缩写,Enter键获得pharse.

  2. HttpContext.Current

    HttpContext. Response 直接这样写会报错 是因为 httpcontext没有提供response 这个静态的方法. 通过这样写就可以 ASP.NET还为它提供了一个静态属性Http ...

  3. 关于SqlServer修改数据库常用信息的方法

    --系统表里存放各个数据库属性信息的表之一SELECT name AS [Logical Name], physical_name AS [DB File Path],type_desc AS [Fi ...

  4. datazen 修改instanceid db_encryption_key

    切换到Datazen.Enterprise.Server.3.0.3327.exe 所在的目录 运行如下命令: Datazen.Enterprise.Server.3.0.3327.exe DATAZ ...

  5. 一个Socket数据处理模型

    Socket编程中,如何高效地接收和处理数据,这里介绍一个简单的编程模型. Socket索引 - SocketId 在给出编程模型之前,先提这样一个问题,程序中如何描述Socket连接? 为什么这么问 ...

  6. iOS中JavaScript和OC交互

    转载自:http://www.devzeng.com/blog/ios-uiwebview-interaction-with-javascript.html 还可参考的文章:http://blog.c ...

  7. Ubuntu 12.04下解决Rhythmbox Music Player乱码问题

    1.打开终端输入如下信息: $ sudo gedit ~/.profile 2.在打开的文档末尾加上如下两句: export GST_ID3_TAG_ENCODING=GBK:UTF-8:GB1803 ...

  8. SGU 114.Telecasting station

    题意: 百慕大的每一座城市都坐落在一维直线上.这个国家的政府决定建造一个新的广播电视台.经过了许多次试验后,百慕大的科学家们提出了一个结论,在每座城市的不满意度等于这座城市的市民数与这座城市与广播电视 ...

  9. 【POJ3243】【拓展BSGS】Clever Y

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

  10. Grunt:多个css,js,进行单独压缩

    module.exports = function (grunt) { // 构建任务配置 grunt.initConfig({ //读取package.json的内容,形成个json数据 pkg: ...