packagecom.sicdt.library.core.utils;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.zip.CRC32;importjava.util.zip.CheckedOutputStream;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;importorg.apache.commons.io.IOUtils;importorg.apache.commons.lang3.StringUtils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;/***
*
类 名: FileUtils
*
描 述: 描述类完成的主要功能
*
作 者: shizhenwei
*
创 建: 2017年5月15日
*
版 本: v0.0.2
*
*
历 史: (版本) 作者 时间 注释*/
public classFileUtils {private Logger log = LoggerFactory.getLogger(FileUtils.class);privateFile file;publicFileUtils(File file) {this.file =file;
}publicFileUtils(String pathname) {this(newFile(pathname));
}public staticFileUtils create(String pathname) {return newFileUtils(pathname);
}public staticFileUtils create(File file) {return newFileUtils(file);
}/*** 获取不带扩展名的文件名
*@return
*/
publicString getNameWithOutSuffix() {
String name=file.getName();if(!file.isFile()) returnname;int flag = name.lastIndexOf(".");if(flag != -1){return name.substring(0, flag);
}returnname;
}/*** 获取文件扩展名
*@return
*/
publicString getSuffix(){if(!file.isFile()) return "";
String name=file.getName();int flag = name.lastIndexOf(".");if(flag != -1){return name.substring(flag + 1).toLowerCase();
}return "";
}/*** 获取当前文件所在文件夹路径
*@return
*/
publicString getFolderPath() {
File parent=file.getParentFile();if(parent == null || !parent.exists()){returnFile.separator;
}returnparent.getAbsolutePath();
}/*** 将文件复制到
*@parampathname 文件夹名称
*@return
*/
publicFile copyTo(String pathname) {
File targetFile= newFile(pathname);if(file.isDirectory()){if(!targetFile.exists() || !targetFile.isDirectory()){
targetFile.mkdirs();
}
log.info("Copy folder to: " +pathname);
File[] childFiles=file.listFiles();if(childFiles != null && childFiles.length > 0){for(File childFile: childFiles){
String targetpath= targetFile.getAbsolutePath() + File.separator +childFile.getName();
FileUtils childUtils=FileUtils.create(childFile);
childUtils.copyTo(targetpath);
}
}
}else{try(InputStream input = newFileInputStream(file);
OutputStream output= newFileOutputStream(targetFile);){
IOUtils.copy(input, output);
log.info("Copy file to: " +pathname);
}catch(IOException e){
e.printStackTrace();return null;
}
}returntargetFile;
}public booleanexist() {returnfile.exists();
}/*** 压缩至文件夹
*@paramfoldername
*@return
*/
publicFile zipTo(String foldername, String zipname) {if(StringUtils.isEmpty(zipname)){
zipname= getNameWithOutSuffix() + ".zip";
}
File targetFolder= newFile(foldername);if(!targetFolder.exists() || !targetFolder.isDirectory()){
targetFolder.mkdirs();
}
File targetFile= new File(targetFolder.getAbsolutePath() + File.separator +zipname);try(FileOutputStream output = newFileOutputStream(targetFile);
CheckedOutputStream cos= new CheckedOutputStream(output, newCRC32());
ZipOutputStream zipout= newZipOutputStream(cos);){
compress(file, zipout,"");returntargetFile;
}catch(Exception e){
log.error("文件压缩失败:" +targetFile.getAbsolutePath());return null;
}
}private voidcompress(File zipfile, ZipOutputStream out, String basedir) {if(zipfile.isDirectory()){
File[] files=zipfile.listFiles();for(File childFile: files){
compress(childFile, out, basedir+ zipfile.getName() + "/");
}
}else{try(BufferedInputStream bis = new BufferedInputStream(newFileInputStream(zipfile));){
ZipEntry entry= new ZipEntry(basedir +zipfile.getName());
out.putNextEntry(entry);
IOUtils.copy(bis, out);
}catch(Exception e){
log.error("压缩失败:" + zipfile.getAbsolutePath() + ": " +e.getMessage(), e);
}
}
}public voiddelete(){
delete(file);
}private booleandelete(File file) {if(file.isDirectory()) {
String[] children=file.list();for (int i=0; i
}
}
}returnfile.delete();
}/*** 获取文件MD5
*@return
*/
publicString md5() {returnMD5Utils.getFileMD5String(file);
}
}