import android.app.Activity;
import android.database.Cursor;
import android.provider.MediaStore;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
public class FileUtil {
/**
* 指定文件夹下,按文件夹、文件、名称排序
* @param filePath 指定文件夹路径
* @return 排序后的文件列表
*/
public static List<File> orderByName(String filePath) {
File file = new File(filePath);
File[] files = file.listFiles();
List<File> fileList = new ArrayList<>();
if (files != null && files.length != 0) {
fileList = Arrays.asList(files);
}
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if (o1.isDirectory() && o2.isFile()) {
return -1;
}
if (o1.isFile() && o2.isDirectory()) {
return 1;
}
return o1.getName().compareTo(o2.getName());
}
});
return fileList;
}
/**
* 删除指定文件夹或文件
* @param file 文件夹或文件
* @return 是否删除成功
*/
public static boolean delete(File file) {
if (file.exists()) {
if (file.isDirectory()) {
return deleteDirectory(file);
} else if (file.isFile()) {
return file.delete();
}
}
return false;
}
/**
* 删除文件夹
* @param dirFile 要删除的文件夹
* @return 是否删除成功
*/
public static boolean deleteDirectory(File dirFile) {
boolean flag = true;
File[] files = dirFile.listFiles();
for (File file : files) {
if (file.isFile()) {
flag = file.delete();
if (!flag) {
break;
}
} else if (file.isDirectory()) {
flag = deleteDirectory(file);
if (!flag) {
break;
}
}
}
if (!flag) {
return false;
}
return dirFile.delete();
}
/**
* 移动文件
* @param oldPath 原路径
* @param newPath 新路径
*/
public static void moveFile(String oldPath, String newPath) {
copy(oldPath, newPath);
delete(new File(oldPath));
}
/**
* 复制文件
* @param filePath 原路径
* @param newPath 新路径
*/
public static void copy(String filePath, String newPath) {
File file = new File(filePath);
if (file.isDirectory()) {
copyDirectory(filePath, newPath);
} else if (file.isFile()) {
copyFile(filePath, newPath);
}
}
/**
* 复制文件夹
* @param fromFile 原始文件夹路径
* @param toFile 新文件夹路径
* @return 是否移动成功
*/
public static boolean copyDirectory(String fromFile, String toFile) {
File[] currentFiles;
File root = new File(fromFile);
if (!root.exists()) {
return false;
}
currentFiles = root.listFiles();
File targetDir = new File(toFile);
if (!targetDir.exists()) {
targetDir.mkdirs();
}
for (int i = 0; i < currentFiles.length; i++) {
if (currentFiles[i].isDirectory()) {
copyDirectory(currentFiles[i].getPath(), toFile + "/" + currentFiles[i].getName());
} else {
copyFile(currentFiles[i].getPath(), toFile + "/" + currentFiles[i].getName());
}
}
return true;
}
/**
* 复制文件
* @param filePath 原路径
* @param newPath 新路径
*/
public static void copyFile(String filePath, String newPath) {
if (filePath == null || filePath.length() == 0) {
return;
}
try {
File file = new File(filePath);
if (!file.exists()) {
return;
}
File newDir = new File(newPath).getParentFile();
if (!newDir.exists()) {
newDir.mkdirs();
}
File newFile = new File(newPath);
if (!newFile.exists()) {
file.createNewFile();
}
InputStream is = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(newFile);
byte[] buffer = new byte[4096];
int byteCount = 0;
while ((byteCount = is.read(buffer)) != -1) {
fos.write(buffer, 0, byteCount);
}
fos.flush();
is.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文件重命名,用于复制文件存在命名重复情况
* @param renameFile 需要重命名的文件
* @return 重命名后的文件
*/
public static File fileRename(File renameFile) {
while (true) {
String fileName = renameFile.getName();
if (renameFile.isDirectory()) {
renameFile = new File(renameFile.getPath() + "(1)");
} else if (renameFile.isFile()) {
renameFile = new File(renameFile.getParent() + "/" + fileName.substring(0, fileName.lastIndexOf(".")) + "(1)" + "." + fileName.substring(fileName.lastIndexOf(".") + 1));
}
if (!renameFile.exists()) {
break;
}
}
return renameFile;
}
/**
* 根据关键字搜索文件
* @param context
* @param searchText 关键字
* @return 搜索结果
*/
public static List<File> search(Activity context, String searchText) {
List<File> searchList = new ArrayList<>();
String[] stringColumns = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.DISPLAY_NAME};
Cursor cursor = context.getContentResolver().query(MediaStore.Files.getContentUri("external"), stringColumns, MediaStore.Files.FileColumns.DISPLAY_NAME + " like '%" + searchText + "%'", null, null);
if (cursor.getPosition() != -1) {
cursor.moveToPosition(-1);
}
while (cursor.moveToNext()) {
String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA));
if (!path.startsWith("/storage/emulated/0")) {
continue;
}
File file = new File(path);
if (file.exists()) {
searchList.add(file);
}
}
return searchList;
}
/**
* 获取手机应用中的media列表下的文件
* @return
*/
public static List<File> getAppListFile() {
List<File> fileList = new ArrayList<>();
File appDirectory = new File("/storage/emulated/0/Android/media");
if (appDirectory.exists()) {
File[] files = appDirectory.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
if (file.isDirectory()) {
fileList.add(file);
}
}
}
}
return fileList;
}
/**
* 获取指定文件夹大小
* @param directoryFile 指定文件夹
* @return
*/
public static long getDirectorySize(File directoryFile) {
AtomicLong size = new AtomicLong(0);
if (directoryFile.exists()) {
if (directoryFile.isDirectory()) {
if (directoryFile.listFiles() != null) {
for (File file : directoryFile.listFiles()) {
if (file.isDirectory()) {
size.addAndGet(getDirectorySize(file));
} else {
size.addAndGet(file.length());
}
}
}
} else {
size.addAndGet(directoryFile.length());
}
}
return size.get();
}
}
android文件操作工具类-java
最新推荐文章于 2024-07-10 15:47:46 发布