这个是我觉得github最好的工具类,我写的大部分参考的这个,之所以重写是精简还有看看源码https://github.com/Blankj/AndroidUtilCode
package com.wtkj.baseproduct.utils;
import android.os.Environment;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @author LZY
* @time 2019/1/23
*/
public class FileUtils {
/**
* 获取SD卡绝对路径
*
* @return
*/
public static String getSDCardPath() {
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED);//判断sd卡是否存在
if (sdCardExist) {
sdDir = Environment.getExternalStorageDirectory();//获取跟目录
}
return sdDir.toString();
}
/**
* 判断是否为文件夹 通过路径
*
* @param dirPath
* @return
*/
public static boolean isDir(final String dirPath) {
return isDir(getFileByPath(dirPath));
}
/**
* 判断是否为文件夹
*
* @param file
* @return
*/
public static boolean isDir(final File file) {
return file != null && file.exists() && file.isDirectory();
}
/**
* 判断是否为文件 通过路径
*
* @param filePath
* @return
*/
public static boolean isFile(final String filePath) {
return isFile(getFileByPath(filePath));
}
/**
* 判断是否为文件
*
* @param file
* @return
*/
public static boolean isFile(final File file) {
return file != null && file.exists() && file.isFile();
}
/**
* 创建文件夹 通过路径
*
* @param dirPath
* @return
*/
public static boolean createDir(final String dirPath) {
return createDir(getFileByPath(dirPath));
}
/**
* 创建文件夹
*
* @param file
* @return
*/
public static boolean createDir(final File file) {
return file != null && (file.exists() ? file.isDirectory() : file.mkdirs());
}
/**
* 创建文件 通过路径
*
* @param filePath
* @return
*/
public static boolean createFile(final String filePath, final boolean deleteOldFile) {
return createFile(getFileByPath(filePath), deleteOldFile);
}
/**
* 创建文件
*
* @param file
* @return
*/
public static boolean createFile(final File file, final boolean deleteOldFile) {
if (file == null) return false;
if (!deleteOldFile) {
if (file.exists()) return file.isFile();
} else {
if (file.exists() && !file.delete()) return false;
}
if (!createDir(file.getParentFile())) return false;
try {
return file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 删除文件 通过路径
*
* @param filePath
* @return
*/
public static boolean deleteFile(final String filePath) {
return deleteFile(getFileByPath(filePath));
}
/**
* 删除文件
*
* @param file
* @return
*/
public static boolean deleteFile(final File file) {
if (file == null) return false;
if (file.isDirectory()) {
return deleteDir(file);
}
return deleteSingleFile(file);
}
/**
* 删除文件夹
*
* @param dir
* @return
*/
public static boolean deleteDir(final File dir) {
if (dir == null) return false;
if (!dir.exists()) return true;
if (!dir.isDirectory()) return false;
File[] files = dir.listFiles();
if (files != null && files.length != 0) {
for (File file : files) {
if (file.isFile()) {
if (!file.delete()) return false;
} else if (file.isDirectory()) {
if (!deleteDir(file)) return false;
}
}
}
return dir.delete();
}
/**
* 删除单文件
*
* @param file
* @return
*/
public static boolean deleteSingleFile(final File file) {
return file != null && (!file.exists() || file.isFile() && file.delete());
}
/**
* 拷贝文件夹,通过路径
* @param srcDirPath
* @param destDirPath
* @return
*/
public static boolean copyDir(final String srcDirPath,
final String destDirPath) {
return copyDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));
}
/**
* 拷贝文件夹
* @param srcDir
* @param destDir
* @return
*/
public static boolean copyDir(final File srcDir,
final File destDir) {
return copyOrMoveDir(srcDir, destDir, false);
}
/**
* 移动文件夹 通过路径
* @param srcDirPath
* @param destDirPath
* @return
*/
public static boolean moveDir(final String srcDirPath,
final String destDirPath) {
return moveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));
}
/**
* 移动文件夹
* @param srcDir
* @param destDir
* @return
*/
public static boolean moveDir(final File srcDir,
final File destDir) {
return copyOrMoveDir(srcDir, destDir, true);
}
/**
* 拷贝或移动文件夹 删除旧目标文件夹
* @param srcDir
* @param destDir
* @param isMove
* @return
*/
private static boolean copyOrMoveDir(final File srcDir,
final File destDir,
final boolean isMove) {
return copyOrMoveDir(srcDir, destDir,true, isMove);
}
/**
* 拷贝或移动文件夹
* @param srcDir
* @param destDir
* @param delOldDestDir 删除旧目标文件夹
* @param isMove 是否为移动
* @return
*/
private static boolean copyOrMoveDir(final File srcDir,
final File destDir,
final boolean delOldDestDir,
final boolean isMove) {
if (srcDir == null || destDir == null) return false;
// destDir's path locate in srcDir's path then return false
String srcPath = srcDir.getPath() + File.separator;
String destPath = destDir.getPath() + File.separator;
if (destPath.contains(srcPath)) return false;
if (!srcDir.exists() || !srcDir.isDirectory()) return false;
if (destDir.exists()) {
if (delOldDestDir) {// 删除旧文件夹
if (!deleteAllInDir(destDir)) {// 删除失败
return false;
}
} else {
return true;
}
}
if (!createDir(destDir)) return false;
File[] files = srcDir.listFiles();
for (File file : files) {
File oneDestFile = new File(destPath + file.getName());
if (file.isFile()) {
if (!copyOrMoveFile(file, oneDestFile, delOldDestDir, isMove)) return false;
} else if (file.isDirectory()) {
if (!copyOrMoveDir(file, oneDestFile, delOldDestDir, isMove)) return false;
}
}
return !isMove || deleteDir(srcDir);
}
/**
* 拷贝文件 ,通过路径
* @param srcFilePath
* @param destFilePath
* @return
*/
public static boolean copyFile(final String srcFilePath,
final String destFilePath) {
return copyFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));
}
/**
* 拷贝文件
* @param srcFile
* @param destFile
* @return
*/
public static boolean copyFile(final File srcFile,
final File destFile) {
return copyOrMoveFile(srcFile, destFile, false);
}
/**
* 移动文件
* @param srcFilePath
* @param destFilePath
* @return
*/
public static boolean moveFile(final String srcFilePath,
final String destFilePath) {
return moveFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));
}
/**
* 移动文件
* @param srcFile
* @param destFile
* @return
*/
public static boolean moveFile(final File srcFile,
final File destFile) {
return copyOrMoveFile(srcFile, destFile, true);
}
private static boolean copyOrMoveFile(final File srcFile,
final File destFile,
final boolean isMove) {
return copyOrMoveFile(srcFile, destFile, true, isMove);
}
private static boolean copyOrMoveFile(final File srcFile,
final File destFile,
final boolean delOldDestFile,
final boolean isMove) {
if (srcFile == null || destFile == null) return false;
// srcFile equals destFile then return false
if (srcFile.equals(destFile)) return false;
// srcFile doesn't exist or isn't a file then return false
if (!srcFile.exists() || !srcFile.isFile()) return false;
if (destFile.exists()) {
if (delOldDestFile) {// 删除旧文件
if (!destFile.delete()) {// 删除失败
return false;
}
} else {
return true;
}
}
if (!createDir(destFile.getParentFile())) return false;
try {
return writeFileFromIS(destFile, new FileInputStream(srcFile))
&& !(isMove && !deleteFile(srcFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
}
/**
* 删除所有文件 ,通过路径
* @param dirPath
* @return
*/
public static boolean deleteAllInDir(final String dirPath) {
return deleteAllInDir(getFileByPath(dirPath));
}
/**
* 删除所有文件
* @param dir
* @return
*/
public static boolean deleteAllInDir(final File dir) {
return deleteFilesInDirWithFilter(dir, new FileFilter() {
@Override
public boolean accept(File pathname) {
return true;
}
});
}
/**
* 删除文件,通过文件过滤
* @param dir
* @param filter
* @return
*/
public static boolean deleteFilesInDirWithFilter(final File dir, final FileFilter filter) {
if (dir == null) return false;
// dir doesn't exist then return true
if (!dir.exists()) return true;
// dir isn't a directory then return false
if (!dir.isDirectory()) return false;
File[] files = dir.listFiles();
if (files != null && files.length != 0) {
for (File file : files) {
if (filter.accept(file)) {
if (file.isFile()) {
if (!file.delete()) return false;
} else if (file.isDirectory()) {
if (!deleteDir(file)) return false;
}
}
}
}
return true;
}
private static boolean writeFileFromIS(final File file,
final InputStream is) {
OutputStream os = null;
try {
os = new BufferedOutputStream(new FileOutputStream(file));
byte data[] = new byte[8192];
int len;
while ((len = is.read(data, 0, 8192)) != -1) {
os.write(data, 0, len);
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 获取文件 通过路径
*
* @param filePath
* @return
*/
public static File getFileByPath(final String filePath) {
return isSpace(filePath) ? null : new File(filePath);
}
private static boolean isSpace(final String s) {
if (s == null) return true;
for (int i = 0, len = s.length(); i < len; ++i) {
if (!Character.isWhitespace(s.charAt(i))) {
return false;
}
}
return true;
}
}