You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
5.2 KiB
197 lines
5.2 KiB
package com.yuxue.util;
|
|
|
|
import java.io.File;
|
|
import java.io.FileFilter;
|
|
import java.io.IOException;
|
|
import java.nio.file.FileAlreadyExistsException;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Paths;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Vector;
|
|
import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
import com.yuxue.exception.ResultReturnException;
|
|
|
|
|
|
/**
|
|
*
|
|
* @author yuxue
|
|
* @date 2020-04-19 15:23
|
|
*/
|
|
public class FileUtil {
|
|
|
|
static Lock lock = new ReentrantLock();
|
|
|
|
public static boolean copyAndRename(String from, String to) {
|
|
Path sourcePath = Paths.get(from);
|
|
Path destinationPath = Paths.get(to);
|
|
try {
|
|
Files.copy(sourcePath, destinationPath);
|
|
} catch(FileAlreadyExistsException e) {
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static boolean checkFile(final File file) {
|
|
if(file.exists() && file.isFile()) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* 重命名文件
|
|
* @param file
|
|
* @param newName 可以是文件名,也可以是路径+文件名
|
|
* @return
|
|
*/
|
|
public static boolean renameFile(String filePath, String newName) {
|
|
File file = new File(filePath);
|
|
return renameFile(file, newName);
|
|
}
|
|
|
|
/**
|
|
* 重命名文件
|
|
* @param file
|
|
* @param newName 可以是文件名,也可以是路径+文件名
|
|
* @return
|
|
*/
|
|
public static boolean renameFile(File file, String newName) {
|
|
if(file.exists()) {
|
|
String targetPath = null;
|
|
if(newName.indexOf("/") >= 0 || newName.indexOf("\\\\") >= 0) {
|
|
targetPath = newName;
|
|
} else {
|
|
targetPath = file.getParentFile().getAbsolutePath() + "/" + newName;
|
|
}
|
|
|
|
File targetFile = new File(targetPath);
|
|
file.renameTo(targetFile);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void createDir(String dir) {
|
|
File file = new File(dir);
|
|
if(file.exists() && file.isDirectory()) {
|
|
return ;
|
|
} else {
|
|
file.mkdirs();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除并重新创建目录
|
|
* @param dir
|
|
*/
|
|
public static void recreateDir(final String dir) {
|
|
new File(dir).delete();
|
|
new File(dir).mkdir();
|
|
}
|
|
|
|
|
|
/**
|
|
* 递归获取文件信息
|
|
* @param path String类型
|
|
* @param files
|
|
*/
|
|
public static void getFiles(final String path, Vector<String> files) {
|
|
getFiles(new File(path), files);
|
|
}
|
|
|
|
|
|
/**
|
|
* 递归获取文件信息
|
|
* @param dir FIle类型
|
|
* @param files
|
|
*/
|
|
private static void getFiles(final File dir, Vector<String> files) {
|
|
File[] filelist = dir.listFiles();
|
|
for (File file : filelist) {
|
|
if (file.isDirectory()) {
|
|
getFiles(file, files);
|
|
} else {
|
|
files.add(file.getAbsolutePath());
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* @param dir
|
|
* @param filename
|
|
* @param recursive
|
|
* @return
|
|
*/
|
|
public static List<File> listFile(File dir, final String fileType, boolean recursive) {
|
|
if (!dir.exists()) {
|
|
throw new ResultReturnException("目录:" + dir + "不存在");
|
|
}
|
|
|
|
if (!dir.isDirectory()) {
|
|
throw new ResultReturnException(dir + "不是目录");
|
|
}
|
|
|
|
FileFilter ff = null;
|
|
if (fileType == null || fileType.length() == 0) {
|
|
ff = new FileFilter() {
|
|
@Override
|
|
public boolean accept(File pathname) {
|
|
return true;
|
|
}
|
|
};
|
|
} else {
|
|
ff = new FileFilter() {
|
|
@Override
|
|
public boolean accept(File pathname) {
|
|
if (pathname.isDirectory()) {
|
|
return true;
|
|
}
|
|
String name = pathname.getName().toLowerCase();
|
|
String format = name.substring(name.lastIndexOf(".") + 1);
|
|
if (fileType.contains(format)) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
return listFile(dir, ff, recursive);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
*
|
|
* @param dir
|
|
* @param ff
|
|
* @param recursive 是否遍历子目录
|
|
* @return
|
|
*/
|
|
public static List<File> listFile(File dir, FileFilter ff, boolean recursive) {
|
|
List<File> list = new ArrayList<File>();
|
|
File[] files = dir.listFiles(ff);
|
|
if (files != null && files.length > 0) {
|
|
for (File f : files) {
|
|
// 如果是文件,添加文件到list中
|
|
if (f.isFile() || (f.isDirectory() && !f.getName().startsWith("."))) {
|
|
list.add(f);
|
|
} else if (recursive) {
|
|
// 获取子目录中的文件,添加子目录中的经过过滤的所有文件添加到list
|
|
list.addAll(listFile(f, ff, true));
|
|
}
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
|
|
}
|