文件工具类(工作案例)
代码如下:
public class FileUtils {
//日志
private static final Logger LOGGER = LoggerFactory.getLogger(FileUtils.class);
//文件缓冲区的长度
public static final int BUFFERSIZE = 8192;
/**
* 说明:将字符串写入一个文件中
*
* @param filename 文件名:绝对路径
* @param is 输入流
* @return
*/
public static boolean writeFile(String filename, InputStream is) {
//文件输出流
FileOutputStream fos = null;
try {
fos = new FileOutputStream(filename);
int len;
byte[] buffer = new byte[BUFFERSIZE];
while ((len = is.read(buffer, 0, BUFFERSIZE)) != -1) {
fos.write(buffer, 0, len);
}
return true;
} catch (Exception e) {
LOGGER.error("Exception:", e);
return false;
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
LOGGER.error("IOException:", e);
return false;
}
}
}
/**
* 说明:读取文件内容(static)
*
* @param filename 读取的文件名
* @return String 文件的字符串代码
*/
public static String readFile(String filename) {
String return_str = "";
try {
FileReader fr = new FileReader(filename);
LineNumberReader lr = new LineNumberReader(fr, 512);
while (true) {
String str = lr.readLine();
if (str == null) break;
return_str += str + "\n";
}
lr.close();
} catch (FileNotFoundException e) {
LOGGER.error("File not found:{}", e);
} catch (IOException e) {
LOGGER.error("IO error:{}", e);
}
return return_str;
}
/**
* 文件复制
*
* @param sourceFile 源文件绝对路径
* @param targetFile 目标文件绝对路径
* @return 是否复制成功:true成功 false失败
*/
public static boolean copyFile(File sourceFile, File targetFile) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(sourceFile);
fos = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer, 0, 1024)) != -1) {
fos.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
LOGGER.error("FileNotFoundException:{}", e);
return false;
} catch (IOException e) {
LOGGER.error("IOException:{}", e);
return false;
} finally {
IOUtils.closeQuietly(fos);
IOUtils.closeQuietly(fis);
}
return true;
}
/**
* 递归删除文件夹及文件夹下所有文件
* 备注:当前目录也会删除
*
* @param filePathName 文件绝对路径
*/
public static void deleteDir(String filePathName) {
File file = new File(filePathName);
if (file.exists()) {
deleteFile(file);
LOGGER.info("删除文件成功");
} else {
LOGGER.warn("删除失败,文件目录不存在");
}
}
/**
* 递归删除文件
* @param file
*/
private static void deleteFile(File file) {
//判断当前文件是目录还是文件
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
deleteFile(files[i]);
}
file.delete();//删除文件
} else {
//删除文件
file.delete();//删除文件
}
}
/**
* 取得某个文件路径下的所有文件列表
*
* @param path 文件路径
* @param filter 文件过滤器
* @return List
*/
public static List getListFiles(String path, FileFilter filter) {
List list = new ArrayList();
File file = new File(path);
if (!file.exists()) {
return null;
}
if (!file.isDirectory()) {
list.add(file);
return list;
}
File files[] = file.listFiles(filter);
for (int i = 0; i < files.length; i++) {
File temp = files[i];
if (temp.isFile()) {//文件,直接添加该文件
list.add(temp);
continue;
}
List fileList = getListFiles(temp, filter);//目录,进行查找目录中的文件
if (fileList != null) {
list.addAll(fileList);
}
}
return list;
}
/**
* 递归:取得某个文件下的所有文件列表
*
* @param file 文件
* @param filter 文件过滤器
* @return List
* @throws Exception
*/
private static List getListFiles(File file, FileFilter filter) {
if (file == null) {
return null;
}
List list = new ArrayList();
if (!file.isDirectory()) {
list.add(file);
return list;
}
File files[] = file.listFiles(filter);
for (int i = 0; i < files.length; i++) {
File temp = files[i];
if (temp.isFile()) {//文件,直接添加该文件
list.add(temp);
continue;
}
List fileList = getListFiles(temp, filter);//目录,进行查找目录中的文件
if (fileList != null) {
list.addAll(fileList);
}
}
return list;
}
/**
* 判断文件大小
*
* @param len 文件长度
* @param size 限制大小
* @param unit 限制单位(B,KB,MB,GB)
* @return true超过限制大小 false不超过限制大小
*/
public static boolean checkFileSize(long len, int size, String unit) {
double fileSize = 0;
if ("B".equals(unit.toUpperCase())) {
fileSize = (double) len;
} else if ("KB".equals(unit.toUpperCase())) {
fileSize = (double) len / 1024;
} else if ("MB".equals(unit.toUpperCase())) {
fileSize = (double) len / 1024 / 1024;
} else if ("GB".equals(unit.toUpperCase())) {
fileSize = (double) len / 1024 / 1024 / 1024;
}
LOGGER.info("文件大小fileSize:" + fileSize);
if (fileSize > size) {
return true;
}
return false;
}
public static void main(String[] args) {
//测试文件复制
//String sourceFilePathName = "E:\\app_data\\upload\\temp\\2022\\05\\18\\testfilecopy.xlsx";
//String targetFilePathName = "E:\\app_data\\upload\\testfilecopy_20220518.xlsx";
//File soruceFile = new File(sourceFilePathName);
//File targetFile = new File(targetFilePathName);
//boolean b = copyFile(soruceFile, targetFile);
//if (b) {
// System.out.println("copy success:" + b);
//} else {
// System.out.println("copy fail:" + b);
//}
//测试文件删除
//String filePathName="E:\\app_data\\upload\\testdeletefile";
//deleteDir(filePathName);
//校验文件大小
//File file = new File("C:\\awp_data\\upload\\temp\\lineFeedback\\F102334500.zip");
//File file = new File("C:\\awp_data\\upload\\temp\\lineFeedback\\F102334500_1.zip");
//long len = file.length();
//int size = 20;
//String unit = "MB";
//boolean flag = checkFileSize(len, size, unit);
//if (flag) {
// System.out.println("当前文件超过限制大小,限制大小为"+size+unit+" ");
//}else{
// System.out.println("当前文件没有超过限制大小,限制大小为"+size+unit+" ");
//}
}
}