androidutilcode使用_Android-FileUtils工具类

news/2024/7/7 21:47:58

public final class FileUtils {

private FileUtils() {

throw new UnsupportedOperationException("u can't instantiate me...");

}

private static final String LINE_SEP = System.getProperty("line.separator");

/**

* 根据文件路径获取文件

*

*@param filePath 文件路径

*@return 文件

*/

public static File getFileByPath(final String filePath) {

return isSpace(filePath) ? null : new File(filePath);

}

/**

* 根据文件目录路径获取子目录名称(不获取二级子目录)

*@param dirPath 文件路径

*@return 文件目录名称

*/

public static List getFiledirList(String dirPath){

if (dirPath == null || !isDir(dirPath)) return null;

List stringList = new ArrayList<>();

File f = new File(dirPath);

File[] files = f.listFiles();

if(files != null&& files.length != 0){

for (File file : files) {

if (file.isDirectory()) {

stringList.add(file.getName());

}

}

}

return stringList;

}

/**

* 判断文件是否存在

*

*@param filePath 文件路径

*@return {@code true}: 存在
{@code false}: 不存在

*/

public static boolean isFileExists(final String filePath) {

return isFileExists(getFileByPath(filePath));

}

/**

* 判断文件是否存在

*

*@param file 文件

*@return {@code true}: 存在
{@code false}: 不存在

*/

public static boolean isFileExists(final File file) {

return file != null && file.exists();

}

/**

* 重命名文件

*

*@param filePath 文件路径

*@param newName 新名称

*@return {@code true}: 重命名成功
{@code false}: 重命名失败

*/

public static boolean rename(final String filePath, final String newName) {

return rename(getFileByPath(filePath), newName);

}

/**

* 重命名文件

*

*@param file 文件

*@param newName 新名称

*@return {@code true}: 重命名成功
{@code false}: 重命名失败

*/

public static boolean rename(final File file, final String newName) {

// 文件为空返回false

if (file == null) return false;

// 文件不存在返回false

if (!file.exists()) return false;

// 新的文件名为空返回false

if (isSpace(newName)) return false;

// 如果文件名没有改变返回true

if (newName.equals(file.getName())) return true;

File newFile = new File(file.getParent() + File.separator + newName);

// 如果重命名的文件已存在返回false

return !newFile.exists()

&& file.renameTo(newFile);

}

/**

* 判断是否是目录

*

*@param dirPath 目录路径

*@return {@code true}: 是
{@code false}: 否

*/

public static boolean isDir(final String dirPath) {

return isDir(getFileByPath(dirPath));

}

/**

* 判断是否是目录

*

*@param file 文件

*@return {@code true}: 是
{@code false}: 否

*/

public static boolean isDir(final File file) {

return isFileExists(file) && file.isDirectory();

}

/**

* 判断是否是文件

*

*@param filePath 文件路径

*@return {@code true}: 是
{@code false}: 否

*/

public static boolean isFile(final String filePath) {

return isFile(getFileByPath(filePath));

}

/**

* 判断是否是文件

*

*@param file 文件

*@return {@code true}: 是
{@code false}: 否

*/

public static boolean isFile(final File file) {

return isFileExists(file) && file.isFile();

}

/**

* 判断目录是否存在,不存在则判断是否创建成功

*

*@param dirPath 目录路径

*@return {@code true}: 存在或创建成功
{@code false}: 不存在或创建失败

*/

public static boolean createOrExistsDir(final String dirPath) {

return createOrExistsDir(getFileByPath(dirPath));

}

/**

* 判断目录是否存在,不存在则判断是否创建成功

*

*@param file 文件

*@return {@code true}: 存在或创建成功
{@code false}: 不存在或创建失败

*/

public static boolean createOrExistsDir(final File file) {

// 如果存在,是目录则返回true,是文件则返回false,不存在则返回是否创建成功

return file != null && (file.exists() ? file.isDirectory() : file.mkdirs());

}

/**

* 判断文件是否存在,不存在则判断是否创建成功

*

*@param filePath 文件路径

*@return {@code true}: 存在或创建成功
{@code false}: 不存在或创建失败

*/

public static boolean createOrExistsFile(final String filePath) {

return createOrExistsFile(getFileByPath(filePath));

}

/**

* 判断文件是否存在,不存在则判断是否创建成功

*

*@param file 文件

*@return {@code true}: 存在或创建成功
{@code false}: 不存在或创建失败

*/

public static boolean createOrExistsFile(final File file) {

if (file == null) return false;

// 如果存在,是文件则返回true,是目录则返回false

if (file.exists()) return file.isFile();

if (!createOrExistsDir(file.getParentFile())) return false;

try {

return file.createNewFile();

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 判断文件是否存在,存在则在创建之前删除

*

*@param file 文件

*@return {@code true}: 创建成功
{@code false}: 创建失败

*/

public static boolean createFileByDeleteOldFile(final File file) {

if (file == null) return false;

// 文件存在并且删除失败返回false

if (file.exists() && !file.delete()) return false;

// 创建目录失败返回false

if (!createOrExistsDir(file.getParentFile())) return false;

try {

return file.createNewFile();

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 复制或移动目录

*

*@param srcDirPath 源目录路径

*@param destDirPath 目标目录路径

*@param isMove 是否移动

*@return {@code true}: 复制或移动成功
{@code false}: 复制或移动失败

*/

private static boolean copyOrMoveDir(final String srcDirPath, final String destDirPath, final boolean isMove) {

return copyOrMoveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath), isMove);

}

/**

* 复制或移动目录

*

*@param srcDir 源目录

*@param destDir 目标目录

*@param isMove 是否移动

*@return {@code true}: 复制或移动成功
{@code false}: 复制或移动失败

*/

private static boolean copyOrMoveDir(final File srcDir, final File destDir, final boolean isMove) {

if (srcDir == null || destDir == null) return false;

// 如果目标目录在源目录中则返回false,看不懂的话好好想想递归怎么结束

// srcPath : F:\\MyGithub\\AndroidUtilCode\\utilcode\\src\\test\\res

// destPath: F:\\MyGithub\\AndroidUtilCode\\utilcode\\src\\test\\res1

// 为防止以上这种情况出现出现误判,须分别在后面加个路径分隔符

String srcPath = srcDir.getPath() + File.separator;

String destPath = destDir.getPath() + File.separator;

if (destPath.contains(srcPath)) return false;

// 源文件不存在或者不是目录则返回false

if (!srcDir.exists() || !srcDir.isDirectory()) return false;

// 目标目录不存在返回false

if (!createOrExistsDir(destDir)) return false;

File[] files = srcDir.listFiles();

for (File file : files) {

File oneDestFile = new File(destPath + file.getName());

if (file.isFile()) {

// 如果操作失败返回false

if (!copyOrMoveFile(file, oneDestFile, isMove)) return false;

} else if (file.isDirectory()) {

// 如果操作失败返回false

if (!copyOrMoveDir(file, oneDestFile, isMove)) return false;

}

}

return !isMove || deleteDir(srcDir);

}

/**

* 复制或移动文件

*

*@param srcFilePath 源文件路径

*@param destFilePath 目标文件路径

*@param isMove 是否移动

*@return {@code true}: 复制或移动成功
{@code false}: 复制或移动失败

*/

private static boolean copyOrMoveFile(final String srcFilePath, final String destFilePath, final boolean isMove) {

return copyOrMoveFile(getFileByPath(srcFilePath), getFileByPath(destFilePath), isMove);

}

/**

* 复制或移动文件

*

*@param srcFile 源文件

*@param destFile 目标文件

*@param isMove 是否移动

*@return {@code true}: 复制或移动成功
{@code false}: 复制或移动失败

*/

private static boolean copyOrMoveFile(final File srcFile, final File destFile, final boolean isMove) {

if (srcFile == null || destFile == null) return false;

// 源文件不存在或者不是文件则返回false

if (!srcFile.exists() || !srcFile.isFile()) return false;

// 目标文件存在且是文件则返回false

if (destFile.exists() && destFile.isFile()) return false;

// 目标目录不存在返回false

if (!createOrExistsDir(destFile.getParentFile())) return false;

try {

return FileIOUtils.writeFileFromIS(destFile, new FileInputStream(srcFile), false)

&& !(isMove && !deleteFile(srcFile));

} catch (FileNotFoundException e) {

e.printStackTrace();

return false;

}

}

/**

* 复制目录

*

*@param srcDirPath 源目录路径

*@param destDirPath 目标目录路径

*@return {@code true}: 复制成功
{@code false}: 复制失败

*/

public static boolean copyDir(final String srcDirPath, final String destDirPath) {

return copyDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));

}

/**

* 复制目录

*

*@param srcDir 源目录

*@param destDir 目标目录

*@return {@code true}: 复制成功
{@code false}: 复制失败

*/

public static boolean copyDir(final File srcDir, final File destDir) {

return copyOrMoveDir(srcDir, destDir, false);

}

/**

* 复制文件

*

*@param srcFilePath 源文件路径

*@param destFilePath 目标文件路径

*@return {@code true}: 复制成功
{@code false}: 复制失败

*/

public static boolean copyFile(final String srcFilePath, final String destFilePath) {

return copyFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));

}

/**

* 复制文件

*

*@param srcFile 源文件

*@param destFile 目标文件

*@return {@code true}: 复制成功
{@code false}: 复制失败

*/

public static boolean copyFile(final File srcFile, final File destFile) {

return copyOrMoveFile(srcFile, destFile, false);

}

/**

* 移动目录

*

*@param srcDirPath 源目录路径

*@param destDirPath 目标目录路径

*@return {@code true}: 移动成功
{@code false}: 移动失败

*/

public static boolean moveDir(final String srcDirPath, final String destDirPath) {

return moveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));

}

/**

* 移动目录

*

*@param srcDir 源目录

*@param destDir 目标目录

*@return {@code true}: 移动成功
{@code false}: 移动失败

*/

public static boolean moveDir(final File srcDir, final File destDir) {

return copyOrMoveDir(srcDir, destDir, true);

}

/**

* 移动文件

*

*@param srcFilePath 源文件路径

*@param destFilePath 目标文件路径

*@return {@code true}: 移动成功
{@code false}: 移动失败

*/

public static boolean moveFile(final String srcFilePath, final String destFilePath) {

Log.e("xxx","移动文件"+srcFilePath+"---->"+destFilePath);

return moveFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));

}

/**

* 移动文件

*

*@param srcFile 源文件

*@param destFile 目标文件

*@return {@code true}: 移动成功
{@code false}: 移动失败

*/

public static boolean moveFile(final File srcFile, final File destFile) {

return copyOrMoveFile(srcFile, destFile, true);

}

/**

* 删除目录

*

*@param dirPath 目录路径

*@return {@code true}: 删除成功
{@code false}: 删除失败

*/

public static boolean deleteDir(final String dirPath) {

return deleteDir(getFileByPath(dirPath));

}

/**

* 删除文件或目录

*@param file

*@return

*/

public static boolean deleteDirOrFile(File file){

if (file == null) return false;

if (!file.exists()) return false;

if(file.isFile()){

return deleteFile(file);

}else{

return deleteDir(file);

}

}

/**

* 删除文件或目录

*@param path

*@return

*/

public static boolean deleteDirOrFile(String path){

return deleteDirOrFile(getFileByPath(path));

}

/**

* 删除目录

*

*@param dir 目录

*@return {@code true}: 删除成功
{@code false}: 删除失败

*/

public static boolean deleteDir(final File dir) {

if (dir == null) return false;

// 目录不存在返回true

if (!dir.exists()) return true;

// 不是目录返回false

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();

}

/**

* 删除Luban文件集合 以“|” 分割

*@param srcFilePaths

*/

public static void deleteFiles(String srcFilePaths){

if(TextUtils.isEmpty(srcFilePaths))

return;

List list = Arrays.asList(srcFilePaths.split("\\|"));

for(String path : list){

if(path.contains("luban")){

deleteFile(path);

}

}

}

/**

* 删除文件

*

*@param srcFilePath 文件路径

*@return {@code true}: 删除成功
{@code false}: 删除失败

*/

public static boolean deleteFile(final String srcFilePath) {

return deleteFile(getFileByPath(srcFilePath));

}

/**

* 删除文件

*

*@param file 文件

*@return {@code true}: 删除成功
{@code false}: 删除失败

*/

public static boolean deleteFile(final File file) {

return file != null && (!file.exists() || file.isFile() && file.delete());

}

/**

* 删除目录下的所有文件

*

*@param dirPath 目录路径

*@return {@code true}: 删除成功
{@code false}: 删除失败

*/

public static boolean deleteFilesInDir(final String dirPath) {

return deleteFilesInDir(getFileByPath(dirPath));

}

/**

* 删除目录下的所有文件

*

*@param dir 目录

*@return {@code true}: 删除成功
{@code false}: 删除失败

*/

public static boolean deleteFilesInDir(final File dir) {

if (dir == null) return false;

// 目录不存在返回true

if (!dir.exists()) return true;

// 不是目录返回false

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 true;

}

/**

* 获取目录下所有文件

*

*@param dirPath 目录路径

*@param isRecursive 是否递归进子目录

*@return 文件链表

*/

public static List listFilesInDir(final String dirPath, final boolean isRecursive) {

return listFilesInDir(getFileByPath(dirPath), isRecursive);

}

/**

* 获取目录下所有文件

*

*@param dir 目录

*@param isRecursive 是否递归进子目录

*@return 文件链表

*/

public static List listFilesInDir(final File dir, final boolean isRecursive) {

if (!isDir(dir)) return null;

if (isRecursive) return listFilesInDir(dir);

List list = new ArrayList<>();

File[] files = dir.listFiles();

if (files != null && files.length != 0) {

Collections.addAll(list, files);

}

return list;

}

/**

* 获取目录下所有文件包括子目录

*

*@param dirPath 目录路径

*@return 文件链表

*/

public static List listFilesInDir(final String dirPath) {

return listFilesInDir(getFileByPath(dirPath));

}

/**

* 获取目录下所有文件包括子目录

*

*@param dir 目录

*@return 文件链表

*/

public static List listFilesInDir(final File dir) {

if (!isDir(dir)) return null;

List list = new ArrayList<>();

File[] files = dir.listFiles();

if (files != null && files.length != 0) {

for (File file : files) {

list.add(file);

if (file.isDirectory()) {

List fileList = listFilesInDir(file);

if (fileList != null) {

list.addAll(fileList);

}

}

}

}

return list;

}

/**

* 获取目录下所有后缀名为suffix的文件

*

大小写忽略

*

*@param dirPath 目录路径

*@param suffix 后缀名

*@param isRecursive 是否递归进子目录

*@return 文件链表

*/

public static List listFilesInDirWithFilter(final String dirPath, final String suffix, final boolean isRecursive) {

return listFilesInDirWithFilter(getFileByPath(dirPath), suffix, isRecursive);

}

/**

* 获取目录下所有后缀名为suffix的文件

*

大小写忽略

*

*@param dir 目录

*@param suffix 后缀名

*@param isRecursive 是否递归进子目录

*@return 文件链表

*/

public static List listFilesInDirWithFilter(final File dir, final String suffix, final boolean isRecursive) {

if (isRecursive) return listFilesInDirWithFilter(dir, suffix);

if (dir == null || !isDir(dir)) return null;

List list = new ArrayList<>();

File[] files = dir.listFiles();

if (files != null && files.length != 0) {

for (File file : files) {

if(file.length()>10){

if (file.getName().toUpperCase().endsWith(suffix.toUpperCase())) {

list.add(file);

}

}

}

}

return list;

}

/**

* 获取目录下所有后缀名为suffix的文件包括子目录

*

大小写忽略

*

*@param dirPath 目录路径

*@param suffix 后缀名

*@return 文件链表

*/

public static List listFilesInDirWithFilter(final String dirPath, final String suffix) {

return listFilesInDirWithFilter(getFileByPath(dirPath), suffix);

}

/**

* 获取目录下所有后缀名为suffix的文件包括子目录

*

大小写忽略

*

*@param dir 目录

*@param suffix 后缀名

*@return 文件链表

*/

public static List listFilesInDirWithFilter(final File dir, final String suffix) {

if (dir == null || !isDir(dir)) return null;

List list = new ArrayList<>();

File[] files = dir.listFiles();

if (files != null && files.length != 0) {

for (File file : files) {

if (file.getName().toUpperCase().endsWith(suffix.toUpperCase())) {

list.add(file);

}

if (file.isDirectory()) {

list.addAll(listFilesInDirWithFilter(file, suffix));

}

}

}

return list;

}

/**

* 获取目录下所有符合filter的文件

*

*@param dirPath 目录路径

*@param filter 过滤器

*@param isRecursive 是否递归进子目录

*@return 文件链表

*/

public static List listFilesInDirWithFilter(final String dirPath, final FilenameFilter filter, final boolean isRecursive) {

return listFilesInDirWithFilter(getFileByPath(dirPath), filter, isRecursive);

}

/**

* 获取目录下所有符合filter的文件

*

*@param dir 目录

*@param filter 过滤器

*@param isRecursive 是否递归进子目录

*@return 文件链表

*/

public static List listFilesInDirWithFilter(final File dir, final FilenameFilter filter, final boolean isRecursive) {

if (isRecursive) return listFilesInDirWithFilter(dir, filter);

if (dir == null || !isDir(dir)) return null;

List list = new ArrayList<>();

File[] files = dir.listFiles();

if (files != null && files.length != 0) {

for (File file : files) {

if (filter.accept(file.getParentFile(), file.getName())) {

list.add(file);

}

}

}

return list;

}

/**

* 获取目录下所有符合filter的文件包括子目录

*

*@param dirPath 目录路径

*@param filter 过滤器

*@return 文件链表

*/

public static List listFilesInDirWithFilter(final String dirPath, final FilenameFilter filter) {

return listFilesInDirWithFilter(getFileByPath(dirPath), filter);

}

/**

* 获取目录下所有符合filter的文件包括子目录

*

*@param dir 目录

*@param filter 过滤器

*@return 文件链表

*/

public static List listFilesInDirWithFilter(final File dir, final FilenameFilter filter) {

if (dir == null || !isDir(dir)) return null;

List list = new ArrayList<>();

File[] files = dir.listFiles();

if (files != null && files.length != 0) {

for (File file : files) {

if (filter.accept(file.getParentFile(), file.getName())) {

list.add(file);

}

if (file.isDirectory()) {

list.addAll(listFilesInDirWithFilter(file, filter));

}

}

}

return list;

}

/**

* 获取目录下指定文件名的文件包括子目录

*

大小写忽略

*

*@param dirPath 目录路径

*@param fileName 文件名

*@return 文件链表

*/

public static List searchFileInDir(final String dirPath, final String fileName) {

return searchFileInDir(getFileByPath(dirPath), fileName);

}

/**

* 获取目录下指定文件名的文件包括子目录

*

大小写忽略

*

*@param dir 目录

*@param fileName 文件名

*@return 文件链表

*/

public static List searchFileInDir(final File dir, final String fileName) {

if (dir == null || !isDir(dir)) return null;

List list = new ArrayList<>();

File[] files = dir.listFiles();

if (files != null && files.length != 0) {

for (File file : files) {

if (file.getName().toUpperCase().equals(fileName.toUpperCase())) {

list.add(file);

}

if (file.isDirectory()) {

list.addAll(searchFileInDir(file, fileName));

}

}

}

return list;

}

/**

* 获取文件最后修改的毫秒时间戳

*

*@param filePath 文件路径

*@return 文件最后修改的毫秒时间戳

*/

public static long getFileLastModified(final String filePath) {

return getFileLastModified(getFileByPath(filePath));

}

/**

* 获取文件最后修改的毫秒时间戳

*

*@param file 文件

*@return 文件最后修改的毫秒时间戳

*/

public static long getFileLastModified(final File file) {

if (file == null) return -1;

return file.lastModified();

}

/**

* 简单获取文件编码格式

*

*@param filePath 文件路径

*@return 文件编码

*/

public static String getFileCharsetSimple(final String filePath) {

return getFileCharsetSimple(getFileByPath(filePath));

}

/**

* 简单获取文件编码格式

*

*@param file 文件

*@return 文件编码

*/

public static String getFileCharsetSimple(final File file) {

int p = 0;

InputStream is = null;

try {

is = new BufferedInputStream(new FileInputStream(file));

p = (is.read() << 8) + is.read();

} catch (IOException e) {

e.printStackTrace();

} finally {

CloseUtils.closeIO(is);

}

switch (p) {

case 0xefbb:

return "UTF-8";

case 0xfffe:

return "Unicode";

case 0xfeff:

return "UTF-16BE";

default:

return "GBK";

}

}

/**

* 获取文件行数

*

*@param filePath 文件路径

*@return 文件行数

*/

public static int getFileLines(final String filePath) {

return getFileLines(getFileByPath(filePath));

}

/**

* 获取文件行数

*

比readLine要快很多

*

*@param file 文件

*@return 文件行数

*/

public static int getFileLines(final File file) {

int count = 1;

InputStream is = null;

try {

is = new BufferedInputStream(new FileInputStream(file));

byte[] buffer = new byte[1024];

int readChars;

if (LINE_SEP.endsWith("\n")) {

while ((readChars = is.read(buffer, 0, 1024)) != -1) {

for (int i = 0; i < readChars; ++i) {

if (buffer[i] == '\n') ++count;

}

}

} else {

while ((readChars = is.read(buffer, 0, 1024)) != -1) {

for (int i = 0; i < readChars; ++i) {

if (buffer[i] == '\r') ++count;

}

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

CloseUtils.closeIO(is);

}

return count;

}

/**

* 获取目录大小

*

*@param dirPath 目录路径

*@return 文件大小

*/

public static String getDirSize(final String dirPath) {

return getDirSize(getFileByPath(dirPath));

}

/**

* 获取目录大小

*

*@param dir 目录

*@return 文件大小

*/

public static String getDirSize(final File dir) {

long len = getDirLength(dir);

return len == -1 ? "" : byte2FitMemorySize(len);

}

/**

* 获取文件大小

*

*@param filePath 文件路径

*@return 文件大小

*/

public static String getFileSize(final String filePath) {

return getFileSize(getFileByPath(filePath));

}

/**

* 获取文件大小

*

*@param file 文件

*@return 文件大小

*/

public static String getFileSize(final File file) {

long len = getFileLength(file);

return len == -1 ? "" : byte2FitMemorySize(len);

}

/**

* 获取目录长度

*

*@param dirPath 目录路径

*@return 目录长度

*/

public static long getDirLength(final String dirPath) {

return getDirLength(getFileByPath(dirPath));

}

/**

* 获取目录长度

*

*@param dir 目录

*@return 目录长度

*/

public static long getDirLength(final File dir) {

if (!isDir(dir)) return -1;

long len = 0;

File[] files = dir.listFiles();

if (files != null && files.length != 0) {

for (File file : files) {

if (file.isDirectory()) {

len += getDirLength(file);

} else {

len += file.length();

}

}

}

return len;

}

/**

* 获取文件长度

*

*@param filePath 文件路径

*@return 文件长度

*/

public static long getFileLength(final String filePath) {

return getFileLength(getFileByPath(filePath));

}

/**

* 获取文件长度

*

*@param file 文件

*@return 文件长度

*/

public static long getFileLength(final File file) {

if (!isFile(file)) return -1;

return file.length();

}

/**

* 获取文件的MD5校验码

*

*@param filePath 文件路径

*@return 文件的MD5校验码

*/

public static String getFileMD5ToString(final String filePath) {

File file = isSpace(filePath) ? null : new File(filePath);

return getFileMD5ToString(file);

}

/**

* 获取文件的MD5校验码

*

*@param filePath 文件路径

*@return 文件的MD5校验码

*/

public static byte[] getFileMD5(final String filePath) {

File file = isSpace(filePath) ? null : new File(filePath);

return getFileMD5(file);

}

/**

* 获取文件的MD5校验码

*

*@param file 文件

*@return 文件的MD5校验码

*/

public static String getFileMD5ToString(final File file) {

return bytes2HexString(getFileMD5(file));

}

/**

* 获取文件的MD5校验码

*

*@param file 文件

*@return 文件的MD5校验码

*/

public static byte[] getFileMD5(final File file) {

if (file == null) return null;

DigestInputStream dis = null;

try {

FileInputStream fis = new FileInputStream(file);

MessageDigest md = MessageDigest.getInstance("MD5");

dis = new DigestInputStream(fis, md);

byte[] buffer = new byte[1024 * 256];

while (true) {

if (!(dis.read(buffer) > 0)) break;

}

md = dis.getMessageDigest();

return md.digest();

} catch (NoSuchAlgorithmException | IOException e) {

e.printStackTrace();

} finally {

CloseUtils.closeIO(dis);

}

return null;

}

/**

* 获取全路径中的最长目录

*

*@param file 文件

*@return filePath最长目录

*/

public static String getDirName(final File file) {

if (file == null) return null;

return getDirName(file.getPath());

}

/**

* 获取全路径中的最长目录

*

*@param filePath 文件路径

*@return filePath最长目录

*/

public static String getDirName(final String filePath) {

if (isSpace(filePath)) return filePath;

int lastSep = filePath.lastIndexOf(File.separator);

return lastSep == -1 ? "" : filePath.substring(0, lastSep + 1);

}

/**

* 获取全路径中的文件名

*

*@param file 文件

*@return 文件名

*/

public static String getFileName(final File file) {

if (file == null) return null;

return getFileName(file.getPath());

}

/**

* 获取全路径中的文件名

*

*@param filePath 文件路径

*@return 文件名

*/

public static String getFileName(final String filePath) {

if (isSpace(filePath)) return filePath;

int lastSep = filePath.lastIndexOf(File.separator);

return lastSep == -1 ? filePath : filePath.substring(lastSep + 1);

}

/**

* 获取全路径中的不带拓展名的文件名

*

*@param file 文件

*@return 不带拓展名的文件名

*/

public static String getFileNameNoExtension(final File file) {

if (file == null) return null;

return getFileNameNoExtension(file.getPath());

}

/**

* 获取全路径中的不带拓展名的文件名

*

*@param filePath 文件路径

*@return 不带拓展名的文件名

*/

public static String getFileNameNoExtension(final String filePath) {

if (isSpace(filePath)) return filePath;

int lastPoi = filePath.lastIndexOf('.');

int lastSep = filePath.lastIndexOf(File.separator);

if (lastSep == -1) {

return (lastPoi == -1 ? filePath : filePath.substring(0, lastPoi));

}

if (lastPoi == -1 || lastSep > lastPoi) {

return filePath.substring(lastSep + 1);

}

return filePath.substring(lastSep + 1, lastPoi);

}

/**

* 获取全路径中的文件拓展名

*

*@param file 文件

*@return 文件拓展名

*/

public static String getFileExtension(final File file) {

if (file == null) return null;

return getFileExtension(file.getPath());

}

/**

* 获取全路径中的文件拓展名

*

*@param filePath 文件路径

*@return 文件拓展名

*/

public static String getFileExtension(final String filePath) {

if (isSpace(filePath)) return filePath;

int lastPoi = filePath.lastIndexOf('.');

int lastSep = filePath.lastIndexOf(File.separator);

if (lastPoi == -1 || lastSep >= lastPoi) return "";

return filePath.substring(lastPoi + 1);

}

/**

* 根据文件类型去删除其在系统中对应的Media数据库

*@param file

*@return -1代表不是媒体文件,0表示在数据库中查找不到,1找到数据库中对应的数据,并且删除

*/

public static int deleteMedia(File file){

String name = file.getName();

String path = file.getAbsolutePath();

if(name.contains(".jpg") || name.contains(".mp4")){

Uri MEDIA_URI = null;

if(name.contains(".jpg")){

if(path.contains("mnt/sdcard/")){

MEDIA_URI = MediaStore.Images.Media.INTERNAL_CONTENT_URI;

path = path.replace("/mnt/sdcard/", "/storage/sdcard0/");

}else if(file.getAbsolutePath().contains("mnt/sdcard2/")){

MEDIA_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

path = path.replace("/mnt/sdcard2/","/storage/sdcard1/");

}

}else{

if(path.contains("mnt/sdcard/")){

MEDIA_URI = MediaStore.Video.Media.INTERNAL_CONTENT_URI;

path = path.replace("/mnt/sdcard1/","/storage/sdcard0/");

}else if(file.getAbsolutePath().contains("mnt/sdcard2/")){

MEDIA_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

path = path.replace("/mnt/sdcard2/","/storage/sdcard1/");

}

}

int resultCode = 0 ;

// resultCode = MyApp.getInstance().getContentResolver().delete(MEDIA_URI, MediaStore.Images.Media.DATA+"="+"'"+path+"'" , null);

return resultCode;

}else{

return -1;

}

}

///

// copy from ConvertUtils

///

private static final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

/**

* byteArr转hexString

*

例如:

* bytes2HexString(new byte[] { 0, (byte) 0xa8 }) returns 00A8

*

*@param bytes 字节数组

*@return 16进制大写字符串

*/

private static String bytes2HexString(final byte[] bytes) {

if (bytes == null) return null;

int len = bytes.length;

if (len <= 0) return null;

char[] ret = new char[len << 1];

for (int i = 0, j = 0; i < len; i++) {

ret[j++] = hexDigits[bytes[i] >>> 4 & 0x0f];

ret[j++] = hexDigits[bytes[i] & 0x0f];

}

return new String(ret);

}

/**

* 字节数转合适内存大小

*

保留3位小数

*

*@param byteNum 字节数

*@return 合适内存大小

*/

@SuppressLint("DefaultLocale")

private static String byte2FitMemorySize(final long byteNum) {

if (byteNum < 0) {

return "shouldn't be less than zero!";

} else if (byteNum < 1024) {

return String.format("%.3fB", (double) byteNum + 0.0005);

} else if (byteNum < 1048576) {

return String.format("%.3fKB", (double) byteNum / 1024 + 0.0005);

} else if (byteNum < 1073741824) {

return String.format("%.3fMB", (double) byteNum / 1048576 + 0.0005);

} else {

return String.format("%.3fGB", (double) byteNum / 1073741824 + 0.0005);

}

}

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;

}

// ---------------

/**

* 在指定的位置创建指定的文件

*@param filePath 完整的文件路径

*@param mkdir 是否创建相关的文件夹

*@throws IOException

*/

public static void mkFile(String filePath, boolean mkdir) throws IOException{

File file = new File(filePath);

/**

* mkdirs()创建多层目录,mkdir()创建单层目录

* writeObject时才创建磁盘文件。

* 若不创建文件,readObject出错。

*/

file.getParentFile().mkdirs();

file.createNewFile();

file = null;

}

/**

* 在指定的位置创建文件夹

*@param dirPath 文件夹路径

*@return 若创建成功,则返回True;反之,则返回False

*/

public static boolean mkDir(String dirPath) {

return new File(dirPath).mkdirs();

}

/**

* 删除指定的文件

*@param filePath 文件路径

*@return 若删除成功,则返回True;反之,则返回False

*/

public static boolean delFile(String filePath) {

return new File(filePath).delete();

}

/**

* 删除指定的文件夹

*@param dirPath 文件夹路径

*@param delFile 文件夹中是否包含文件

*@return 若删除成功,则返回True;反之,则返回False

*/

public static boolean delDir(String dirPath, boolean delFile) {

if (delFile) {

File file = new File(dirPath);

if (file.isFile()) {

return file.delete();

} else if (file.isDirectory()) {

if (file.listFiles().length == 0) {

return file.delete();

} else {

int zFiles = file.listFiles().length;

File[] delfile = file.listFiles();

for (int i = 0; i < zFiles; i++) {

if (delfile[i].isDirectory()) {

delDir(delfile[i].getAbsolutePath(), true);

}

delfile[i].delete();

}

return file.delete();

}

} else {

return false;

}

} else {

return new File(dirPath).delete();

}

}

/**

* 复制文件/文件夹 若要进行文件夹复制,请勿将目标文件夹置于源文件夹中

*@param source 源文件(夹)

*@param target 目标文件(夹)

*@param isFolder 若进行文件夹复制,则为True;反之为False

*@throws IOException

*/

public static void copy(String source, String target, boolean isFolder) throws IOException{

if (isFolder) {

new File(target).mkdirs();

File a = new File(source);

String[] file = a.list();

File temp = null;

for (int i = 0; i < file.length; i++) {

if (source.endsWith(File.separator)) {

temp = new File(source + file[i]);

} else {

temp = new File(source + File.separator + file[i]);

}

if (temp.isFile()) {

FileInputStream input = new FileInputStream(temp);

FileOutputStream output = new FileOutputStream(target + File.separator + temp.getName().toString());

byte[] b = new byte[1024];

int len;

while ((len = input.read(b)) != -1) {

output.write(b, 0, len);

}

output.flush();

output.close();

input.close();

} if (temp.isDirectory()) {

copy(source + File.separator + file[i], target + File.separator + file[i], true);

}

}

} else {

int byteread = 0;

File oldfile = new File(source);

if (oldfile.exists()) {

InputStream inputStream = new FileInputStream(source);

File file = new File(target);

file.getParentFile().mkdirs();

file.createNewFile();

FileOutputStream outputStream = new FileOutputStream(file);

byte[] buffer = new byte[1024];

while ((byteread = inputStream.read(buffer)) != -1){

outputStream.write(buffer, 0, byteread);

}

inputStream.close();

outputStream.close();

}

}

}

}


http://lihuaxi.xjx100.cn/news/270230.html

相关文章

【美团】招聘计算机视觉研究岗实习生

Base&#xff1a;北京、上海学历要求&#xff1a;硕士研究生职位描述&#xff1a;这里是美团视觉智能中心的招聘邀请。视觉智能中心面向美团多样化的生活服务场景&#xff0c;通过计算机视觉技术提升业务价值。美团视觉智能中心的愿景是“打造生活服务场景下领先的视觉智能引擎…

“编程能力差,90%的人会输在这点上!”谷歌开发:其实都是在瞎努力

这是一个很难让人心平气和的年代。疫情之下&#xff0c;很多人的都在面临着&#xff1a;失业、降薪、找不到工作、随时被裁等风险。但是&#xff1a;有心的人早已上路超车&#xff0c;做个人能力的升级——提高自己的不可替代性。李开复曾提出过“五秒钟准则”&#xff1a;一项…

NextGEN Gallery ~ 最强WordPress相册插件

博客照片很多&#xff1f;上传和管理图片太烦&#xff1f;想幻灯显示相册&#xff1f;在博客中任意插入动态图片效果&#xff1f;…… 你和我一样&#xff0c;需要NextGEN Gallery&#xff0c;最强WordPress相册插件&#xff01; 其实网上可以搜到不少关于这个插件的介绍&#…

一篇让你搞懂 Nginx

点击上方蓝色“方志朋”&#xff0c;选择“设为星标”回复“666”获取独家整理的学习资料&#xff01;作者&#xff1a;渐暖出处&#xff1a;blog.csdn.net/yujing1314/article/details/107000737来源&#xff1a;公众号51CTO技术栈Nginx 是一个高性能的 HTTP 和反向代理服务器…

使用OpenCV与sklearn实现基于词袋模型的图像分类预测与搜索

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达基于OpenCV实现SIFT特征提取与BOW(Bag of Word)生成向量数据&#xff0c;然后使用sklearn的线性SVM分类器训练模型&#xff0c;实现图像分类预测。实现基于词袋模型的图像…

struts2 实现自定义标签

/*** lostingz* Created on 2015年11月18日*/ package com.test.web.tags;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.struts2.components.Component; import org.apache.struts2.views.jsp.ComponentTa…

mysql中如何设置过滤器_mysql – 使用计数器实现过滤器

我想要实现的目标&#xff1a;我正在开发带有产品目录的网站.这是与我的问题相关的实体的规范化模型(简化)&#xff1a;因此存在一些产品特征(如本例中的大小和类型),它们都具有预定义的值集(例如,存在大小1,2和3,类型可以是1,2或3(这些集合不必相等) ,只是一个例子.)).产品与每…

PSS:更简单有效的End-to-End检测

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达作者丨SuperHui知乎&#xff08;已授权&#xff09;来源丨https://zhuanlan.zhihu.com/p/347515623编辑丨极市平台导读 本文提出了一种简单的NMS-free、end-to-end的目标检测…