Android文件操作工具类(转)

 2014/4/3 18:13:35  孤独的旅行家  博客园

这个工具类包含Android应用开发最基本的几个文件操作方法,也是我第一次发博客与大家分享自己写的东西。

如果有什么补充或修改,欢迎大家提出宝贵的建议。

MyFileFilter.java

static class MyFileFilter implements FilenameFilter{

private String type;

public MyFileFilter(String type){

this.type = type;

}

public boolean accept(File dir,String name){

return name.endsWith(type);

}

}

FileUtil.java

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import com.example.ApplicationContext;//没有源文件,使用时可以把与之相关的代码删除再用
import com.example.MyFileFilter;

/*
* 该类是用来对文件进行基本的操作,包括复制,移动,创建,删除等操作。
*/

public class FileUtils {

public final static int DEFAULT_FILE_OPERATE_MODE = 0;     //创建文件时File对象是绝对路径,如果存在文件则覆盖

public final static int IGNORE_NOT_RECREATE_MODE = 1;    //创建文件时File对象是相对储存器的路径,如果存在文件则表示已经存在,不进行操作

public final static int IGNORE_AND_RECREATE_MODE = 2;    //创建文件时File对象是相对储存器的路径,如果存在文件则表示已经存在,不进行操作

public final static int NOT_IGNORE_RECREATE_MODE = 3;   //创建文件时File对象是绝对路径,如果存在文件则覆盖

private final static boolean DEFAULT_IGNORE_STYLE = false;

private final static boolean DEFAULT_AUTO_CREATE_DIRECTORY = true;   //如果目录不存在是否自动创建

/**

*以File对象为参数创建文件
* @param file
* @param ignore
* 如果mode等于IGNORE_NOT_RECREATE_MODE或 IGNORE_AND_RECREATE_MODE则表示输入的file是相对路径,如果是其他两种模式则表示输入的是绝对路径。
* added sdcard dirctory.
* @throws IOException
*/
public static void createFile(File file, int mode) throws IOException
{

if (file == null || StringUtils.isEmpty(file.getAbsolutePath())) {
return;
}
if (mode == IGNORE_NOT_RECREATE_MODE
|| mode == IGNORE_AND_RECREATE_MODE) {
file = new File(StorageUtils.getStorageFile(),
file.getAbsolutePath());
}
if (mode == DEFAULT_FILE_OPERATE_MODE
|| mode == IGNORE_AND_RECREATE_MODE) {
deleteFile(file);
}
file.createNewFile();
}

/**

*以String对象为参数创建文件
* @param filePath
* @param mode
* @throws IOException
*/
public static void createFile(String filePath, int mode) throws IOException
{

createFile(new File(filePath), mode);
}

/**

*以默认的方式创建文件
* @param filePath
* @throws IOException
*/
public static void createFile(File filePath) throws IOException
{

createFile(filePath, DEFAULT_FILE_OPERATE_MODE);
}

/**
* @param filePath
* @throws IOException
*/
public static void createFile(String filePath) throws IOException
{

createFile(new File(filePath));
}

/**
* 创建文件夹

* @param folder
* @param mode
*/
public static void createFolder(File folder, int mode)
{

if (folder == null || StringUtils.isEmpty(folder.getAbsolutePath())) {
return;
}
if (!folder.isDirectory()) {
return;
}
if (mode == IGNORE_NOT_RECREATE_MODE
|| mode == IGNORE_AND_RECREATE_MODE) {
folder = new File(StorageUtils.getStorageFile(),
folder.getAbsolutePath());
}
if (mode == DEFAULT_FILE_OPERATE_MODE
|| mode == IGNORE_AND_RECREATE_MODE) {
deleteFolder(folder);
}
folder.mkdirs();

}

/**
* @param folder
* @param mode
*/
public static void createFolder(String folder, int mode)
{

createFolder(new File(folder), mode);
}

/**
* @param folder
*/
public static void createFolder(File folder)
{

createFolder(folder, DEFAULT_FILE_OPERATE_MODE);
}

/**
* @param folder
*/
public static void createFolder(String folder)
{

createFolder(new File(folder));
}

/**
* 删除文件

* @param file
*/
public static void deleteFile(File file)
{

if (file == null || StringUtils.isEmpty(file.getAbsolutePath())) {
return;
}
if (file.exists()) {
if (!file.isDirectory()) {
file.delete();
}
}
}

/**
* @param filePath
*/
public static void deleteFile(String filePath)
{

if (!StringUtils.isEmpty(filePath)) {
deleteFile(new File(filePath));
}
}

/**
* 删除一个目录

* @param folder
*/
public static void deleteFolder(File folder)
{

if (folder == null || StringUtils.isEmpty(folder.getAbsolutePath())) {
return;
}
if (folder.exists()) {
if (folder.isDirectory()) {
File[] files = folder.listFiles();
if(files!=null)
{
for (File file : files) {
deleteFolder(file);
}
}
}
else {
deleteFile(folder);
}
}
}

/**
* @param folderPath
*/
public static void deleteFolder(String folderPath)
{

if (!StringUtils.isEmpty(folderPath)) {
deleteFile(new File(folderPath));
}
}

/**
* 查找指定目录下以extensions结尾的文件 

* @param end
* @return
*/
public static List<File> getAllWithEnd(File file, boolean ignore,
String... extensions)
{

if (StringUtils.isEmpty(file.getAbsolutePath())) {
return null;
}
for (String extension : extensions) {
if (StringUtils.isEmpty(extension)) {
return null;
}
}
if (ignore) {
file = new File(StorageUtils.getStorageFile(),
file.getAbsolutePath());
}
if ((!file.exists()) && file.isDirectory()) {
return null;
}
List<File> files = new ArrayList<File>();
fileFilter(file, files, extensions);
return files;

}

/**
* @param path
* @param extensions
* @param ignore
* @return
*/
public static List<File> getAllWithEnd(String path, boolean ignore,
String... extensions)
{

return getAllWithEnd(new File(path), ignore, extensions);
}

/**
* @param file
* @param extensions
* @return
*/
public static List<File> getAllWithEnd(File file, String... extensions)
{

return getAllWithEnd(file, DEFAULT_IGNORE_STYLE, extensions);
}

/**
* @param file
* @param extensions
* @return
*/
public static List<File> getAllWithEnd(String file, String... extensions)
{

return getAllWithEnd(new File(file), DEFAULT_IGNORE_STYLE, extensions);
}

/**
* 过滤文件

* @param file
* @param extensions
* @param files
*/
public static void fileFilter(File file, List<File> files,
String... extensions)
{

if (!file.isDirectory()) {
return;
}
File[] allFiles = file.listFiles();
File[] allExtensionFiles = file.listFiles(new MyFileFilter(extensions));
if (allExtensionFiles != null) {
for (File single : allExtensionFiles) {
files.add(single);
}
}
if (allFiles != null) {
for (File single : allFiles) {
if (single.isDirectory()) {
fileFilter(single, files, extensions);
}
}
}
}

/**
* 复制Assets目录下的文件到指定位置

* @param strAssetsFilePath
* @param strDesFilePath
* @return
*/
public boolean assetsCopyData(String strAssetsFilePath,
String strDesFilePath)
{

boolean bIsSuc = true;
InputStream inputStream = null;
OutputStream outputStream = null;

File file = new File(strDesFilePath);
if (!file.exists()) {
try {
file.createNewFile();
Runtime.getRuntime().exec("chmod 766 " + file);
}
catch (IOException e) {
bIsSuc = false;
}

}
else {// 存在
return true;
}

try {
inputStream = ApplicationContext.mContext.getAssets().open(
strAssetsFilePath);
outputStream = new FileOutputStream(file);

int nLen = 0;

byte[] buff = new byte[1024 * 1];
while ((nLen = inputStream.read(buff)) > 0) {
outputStream.write(buff, 0, nLen);
}

}
catch (IOException e) {
bIsSuc = false;
}
finally {
try {
if (outputStream != null) {
outputStream.close();
}

if (inputStream != null) {
inputStream.close();
}
}
catch (IOException e) {
bIsSuc = false;
}

}

return bIsSuc;
}

/**
* 复制文件

* @param src
* @param dst
* @return
* @throws IOException
*/
public static boolean copyFile(File src, File dst) throws IOException
{

if ((!src.exists()) || src.isDirectory() || dst.isDirectory()) {
return false;
}
if (!dst.exists()) {
dst.createNewFile();
return false;
}
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
inputStream = new FileInputStream(src);
outputStream = new FileOutputStream(dst);
int readLen = 0;
byte[] buf = new byte[1024];
while ((readLen = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, readLen);
}
outputStream.flush();
inputStream.close();
outputStream.close();
return true;
}

/**
* @param src
* @param dst
* @return
* @throws IOException
*/
public static boolean copyFile(String src, String dst) throws IOException
{

return copyFile(new File(src), new File(dst));
}

/**
* 复制整个目录
* @param srcDir
* @param destDir
* @param auto
* @return
* @throws IOException
*/
public static boolean copyFolder(File srcDir, File destDir, boolean auto)
throws IOException
{

if ((!srcDir.exists())) {
return false;
}
if (srcDir.isFile() || destDir.isFile())
return false;
if (!destDir.exists()) {
if (auto) {
destDir.mkdirs();
}
else {
return false;
}
}
File[] srcFiles = srcDir.listFiles();
int len = srcFiles.length;
for (int i = 0; i < len; i++) {
if (srcFiles[i].isFile()) {
File destFile = new File(destDir.getPath() + "//"
+ srcFiles[i].getName());
copyFile(srcFiles[i], destFile);
}
else if (srcFiles[i].isDirectory()) {
File theDestDir = new File(destDir.getPath() + "//"
+ srcFiles[i].getName());
copyFolder(srcFiles[i], theDestDir,auto);
}
}
return true;
}

/**
* @param srcDir
* @param desDir
* @param auto
* @return
* @throws IOException
*/
public static boolean copyFolder(String srcDir, String desDir, boolean auto)
throws IOException
{

return copyFolder(new File(srcDir), new File(desDir), auto);
}

/**
* @param srcDir
* @param desDir
* @return
* @throws IOException
*/
public static boolean copyFolder(File srcDir, File desDir)
throws IOException
{

return copyFolder(srcDir, desDir, DEFAULT_AUTO_CREATE_DIRECTORY);
}

/**
* @param srcDir
* @param desDir
* @return
* @throws IOException
*/
public static boolean copyFolder(String srcDir, String desDir)
throws IOException
{

return copyFolder(srcDir, desDir, DEFAULT_AUTO_CREATE_DIRECTORY);
}

/**
* 移动单个文件
* @param src
* @param dst
* @return
*/
public static boolean moveFile(File src, File dst)
{
boolean isCopy = false;
try {
isCopy = copyFile(src, dst);
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!isCopy)
{
return false;
}
deleteFile(src);
return true;
}

/**
* @param src
* @param dst
* @return
*/
public static boolean moveFile(String src, String dst)
{

return moveFile(new File(src), new File(dst));
}

/**
* 移动整个目录
* @param srcDir
* @param destDir
* @param auto
* @return
*/
public static boolean moveFolder(File srcDir,File destDir,boolean auto)
{
if (!srcDir.isDirectory() || !destDir.isDirectory()) { 
return false; 

if(!srcDir.exists())
{
return false;
}
if(!destDir.exists())
{
if(auto)
{
destDir.mkdirs();
}
else{
return false;
}
}
File[] srcDirFiles = srcDir.listFiles(); 
int len = srcDirFiles.length;
if(len<=0)
{
srcDir.delete();
}
for (int i = 0; i < len; i++) { 
if (srcDirFiles[i].isFile()) { 
File oneDestFile = new File(destDir.getPath() + "//" 
+ srcDirFiles[i].getName()); 
moveFile(srcDirFiles[i], oneDestFile); 
} else if (srcDirFiles[i].isDirectory()) { 
File oneDestFile = new File(destDir.getPath() + "//" 
+ srcDirFiles[i].getName()); 
moveFolder(srcDirFiles[i], oneDestFile,auto); 
deleteFolder(srcDirFiles[i]); 
}


return true; 
}
/**
* @param src
* @param dst
* @param auto
* @return
*/
public static boolean moveFolder(String src,String dst,boolean auto)
{
return moveFolder(new File(src), new File(dst));
}
/**
* @param src
* @param dst
* @return
*/
public static boolean moveFolder(File src,File dst)
{
return moveFolder(src, dst, DEFAULT_AUTO_CREATE_DIRECTORY);
}
/**
* @param src
* @param dst
* @return
*/
public static boolean moveFolder(String src,String dst)
{
return moveFolder(new File(src), new File(dst), DEFAULT_AUTO_CREATE_DIRECTORY);
}

/**
* 获取私有文件目录(/data/data/yourpackage/file)

* @return
*/
public static File getPrivateDir()
{

return ApplicationContext.mContext.getFilesDir();
}
}

Android文件操作工具类(转)的更多相关文章

  1. 小米开源文件管理器MiCodeFileExplorer-源码研究(4)-文件操作工具类FileOperationHelper

    文件操作是非常通用的,注释都写在源代码中了,不多说~需要特别说明的是,任务的异步执行和IOperationProgressListener.拷贝和删除等操作,是比较费时的,采用了异步执行的方式~ An ...

  2. Code片段 : .properties属性文件操作工具类 & JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...

  3. android 文件操作类简易总结

    android 文件操作类(参考链接) http://www.cnblogs.com/menlsh/archive/2013/04/02/2997084.html package com.androi ...

  4. 文件操作工具类: 文件/目录的创建、删除、移动、复制、zip压缩与解压.

    FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.Bu ...

  5. JAVA文件操作工具类(读、增、删除、复制)

    使用JAVA的JFinal框架 1.上传文件模型类UploadFile /** * Copyright (c) 2011-2017, James Zhan 詹波 (jfinal@126.com). * ...

  6. Android FileUtil(android文件工具类)

    android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...

  7. 大过年的,不下班的,上个Android文件操作类(内部存储和sd卡均可)

    package com.kkdiangame.UI.res; import java.io.ByteArrayOutputStream; import java.io.File; import jav ...

  8. Android SQLITE 操作工具类

    首先创建一个类 DatabaseHelper 继承SQLiteOpenHelper帮助类,定义数据库版本,数据库名称,创建表名. private static final int DATABASE_V ...

  9. Java文件操作工具类(复制、删除、重命名、创建路径)

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...

随机推荐

  1. [C++] Const详解

    /**************************************************************** 初级理解: 1.const是定义常量 ==>const意味着只 ...

  2. 在jsp页面中使用jstl标签

    第一步:引入标签库 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%> 第 ...

  3. Struts2+DAO层实现实例01——搭建Struts2基本框架

    实例内容 利用Strust2实现一个登陆+注册功能的登陆系统. 实现基础流程:

  4. System.Activator类

    public static ObjectHandle CreateInstance(string assemblyName, string typeName); 该类有一个方法. // // 摘要: ...

  5. 如何实现自己的Android MVP框架?

    相信熟悉android开发的童鞋对MVP框架应该都不陌生吧,网上很多关于android中实现MVP的文章,大家可以直接搜索学习.这些文章中,MVP的实现思路基本都是把Activity.Fragment ...

  6. C++11 tuple元组

    C++11 tuple 元组 tuple容器(元组), 是表示元组容器, 是不包含任何结构的,快速而低质(粗制滥造, quick and dirty)的, 可以用于函数返回多个返回值; tuple容器 ...

  7. [USACO06NOV]玉米田Corn Fields (状压$dp$)

    题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 块草皮,且最后一位状态为 \(k\) . 同时多记录一个每一列中的 ...

  8. 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (数学)

    Rikka with Prefix Sum 题意: 给出一个数组a,一开始全为0,现在有三种操作: 1.  1 L R W,让区间[L,R]里面的数全都加上W: 2.  2     将a数组变为其前缀 ...

  9. 开启和关闭mysql服务

    @echo offfor /f "skip=3 tokens=4" %%i in ('sc query MySQLa') do set "zt=%%i" &am ...

  10. Java I/O 笔记

    1. Java常用I/O类概述 2. 文件I/O 你可以根据该文件是二进制文件还是文本文件来选择使用FileInputStream(FileOutputStream)或者FileReader(File ...