这个工具类包含Android应用开发最基本的几个文件操作方法,也是我第一次发博客与大家分享自己写的东西。
如果有什么补充或修改,欢迎大家提出宝贵的建议。
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.test.ApplicationContext;
import com.example.test.utils.assist.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();
	}
}