这个工具类包含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();
}
}