FileUtils工具类

编程

文件上传、文件下載、讀寫文件、解压文件

import com.alibaba.fastjson.JSON;

import com.example.demo.util.DateUtil;

import net.lingala.zip4j.core.ZipFile;

import net.lingala.zip4j.exception.ZipException;

import net.lingala.zip4j.model.ZipParameters;

import net.lingala.zip4j.util.Zip4jConstants;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.util.StringUtils;

import org.springframework.web.multipart.MultipartFile;

import java.io.*;

import java.util.*;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public enum FileUtils {

private static final Logger logger = LoggerFactory.getLogger(FileUtils.class);

/**

* 创建文件夹

* @param folderName

* @return

*/

public static boolean createFolder(String folderName) {

boolean result = Boolean.FALSE;

File file = new File(folderName);

//如果文件夹不存在则创建

if (!file.exists()) {

logger.info("文件夹路径不存在,创建路径:{}", folderName);

if (file.mkdirs()) {

logger.info("创建路径成功:{}", folderName);

}

}

logger.info("文件夹路径:{}", folderName);

return result;

}

/**

* 生成文件

*

* @param fileContent 生成文件中的内容

* @param saveFilePath 生成文件保存路径

* @param fileName 生成的文件名

* @return 生成文件是否成功

*/

public static boolean create(String fileContent, String saveFilePath, String fileName) {

logger.info("生成文件操作,fileContent:{},saveFilePath:{},fileName:{}", fileContent, saveFilePath, fileName);

long dateTimeStart = System.currentTimeMillis();

boolean result = Boolean.FALSE;

//生成文件保存路径

String urlPath = saveFilePath + File.separatorChar + fileName;

InputStream is = null;

BufferedReader br = null;

BufferedWriter bufferedWriter = null;

InputStreamReader isr = null;

FileOutputStream fos = null;

OutputStreamWriter osw = null;

try {

File file = new File(saveFilePath);

//如果文件夹不存在则创建

if (!file.exists()) {

logger.info("文件保存路径不存在,创建保存路径:{}", saveFilePath);

if (file.mkdirs()) {

logger.info("文件保存路径生成成功:{}", saveFilePath);

}

}

logger.info("文件访问路径:{}", urlPath);

StringBuilder buffer = new StringBuilder();

is = new ByteArrayInputStream(fileContent.getBytes("UTF-8"));

isr = new InputStreamReader(is, "UTF-8");

br = new BufferedReader(isr);

String line = null;

while ((line = br.readLine()) != null) {

buffer.append(line).append("

");

}

fos = new FileOutputStream(urlPath);

osw = new OutputStreamWriter(fos,"UTF-8");

bufferedWriter = new BufferedWriter(osw);

bufferedWriter.write(buffer.toString());

bufferedWriter.newLine();

bufferedWriter.flush();

result = Boolean.TRUE;

} catch (Exception e) {

logger.error("生成文件异常", e);

} finally {

try {

if (null != is) is.close();

if (null != isr) isr.close();

if (null != fos) fos.close();

if (null != osw) osw.close();

if (null != br) br.close();

if (null != bufferedWriter) bufferedWriter.close();

} catch (Exception e) {

logger.error("释放文件流异常", e);

}

}

logger.info("生成文件耗时:{}", System.currentTimeMillis() - dateTimeStart);

return result;

}

/**

* 压缩文件

*

* @param sourceFilePath :待压缩的文件路径

* @param zipFilePath :压缩后存放路径

* @param saveFileName :压缩后文件的名称

* @return

*/

public static Boolean zipFile(String sourceFilePath , String zipFilePath, String saveFileName) {

ZipOutputStream out = null;

FileInputStream in = null;

Boolean result = Boolean.FALSE;

try {

File sourceFile = new File(sourceFilePath);

if (sourceFile.isFile()){

String sourcePath = sourceFile.getParent();

zipFilePath = StringUtils.isEmpty(zipFilePath)? sourcePath: zipFilePath;

File destZipFile = new File(zipFilePath + File.separatorChar + saveFileName + ".zip");

out = new ZipOutputStream(new FileOutputStream(destZipFile));

byte[] buf = new byte[1024 * 10];

in = new FileInputStream(sourceFile);

out.putNextEntry(new ZipEntry(sourceFile.getName()));

int len;

while ((len = in.read(buf)) > 0) {

out.write(buf, 0, len);

}

result = Boolean.TRUE;

}

}catch(Exception e) {

logger.error("压缩文件异常", e);

}finally {

try {

if (out != null) out.close();

if (in != null) in.close();

} catch (IOException e) {

logger.error("压缩文件关闭流异常", e);

}

}

return result;

}

/**

* 压缩文件或文件夹

* @param srcPath

* @param destPath

* @param password

*/

private static void zipFileWithPwd(String srcPath,String destPath,String password) {

try {

// 生成的压缩文件

ZipFile zipFile = new ZipFile(destPath);

ZipParameters parameters = new ZipParameters();

// 压缩方式

parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);

// 压缩级别

parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);

parameters.setEncryptFiles( true );

parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);

parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);

if (!StringUtils.isEmpty(password)){

parameters.setPassword(password);

}

// 要打包的文件夹

File srcFile = new File(srcPath);

if (srcFile.isDirectory()) {

File[] fs = srcFile.listFiles();

// 遍历t文件夹下所有的文件、文件夹

if (fs != null && fs.length > 0) {

for (File f : fs) {

if (f.isDirectory()) {

zipFile.addFolder(f.getPath(), parameters);

} else {

zipFile.addFile(f, parameters);

}

}

}

} else {

zipFile.addFile(srcFile, parameters);

}

}catch (Exception e){

logger.error("压缩文件异常", e);

}

}

/**

* 解压缩文件

* @param srcPath

* @param destPath

* @param password

*/

private static void unZip(String srcPath,String destPath,String password) {

try {

ZipFile zipFile = new ZipFile(srcPath);

zipFile.extractAll(destPath);

// 如果解压需要密码

if(zipFile.isEncrypted()) {

if (!StringUtils.isEmpty(password)){

zipFile.setPassword(password);

}

}

} catch (ZipException e) {

logger.error("解压缩文件异常", e);

}

}

/**

* 删除单个文件

*

* @param fileName 要删除的文件的文件名

* @return 单个文件删除成功返回true,否则返回false

*/

public static boolean deleteFile(String fileName) {

boolean result = Boolean.FALSE;

try {

File file = new File(fileName);

// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除

if (file.exists() && file.isFile()) {

if (file.delete()) {

logger.info("删除单个文件" + fileName + " 成功!");

result = Boolean.TRUE;

} else {

logger.error("删除单个文件" + fileName + " 失败!");

}

} else {

logger.error("删除单个文件失败:" + fileName + " 不存在!");

}

}catch (Exception e){

logger.error("删除单个文件" + fileName + " 异常!");

}

return result;

}

/**

* 删除beforDay天前的文件

* @param fileName

* @param beforDay 天

* @return

*/

public static boolean deleteFile(String fileName,int beforDay) {

boolean result = Boolean.FALSE;

Date nowTime = new Date();

try {

Date fileModifiedTime = getFileModifiedTime(fileName);

long betweenDate = DateUtil.getOffsetBetweenDate(nowTime, fileModifiedTime, "d");

if (betweenDate >= Long.parseLong(String.valueOf(beforDay))){

deleteFile(fileName);

}

}catch (Exception e){

logger.error("删除单个文件" + fileName + " 异常!");

}

return result;

}

/**

* 获取文件修改时间

* @param fileName

* @return

*/

public static Date getFileModifiedTime(String fileName){

File file = new File(fileName);

if (null == file)

return null;

Calendar cal = Calendar.getInstance();

long time = file.lastModified();

cal.setTimeInMillis(time);

logger.info("FileUtils --> getFileModifiedTime: {}", JSON.toJSONString(cal.getTime()));

return cal.getTime();

}

/**

* 上传文件

*

* 用于读面向行的格式化大文件

* @param inputFile 来源路径

* @param outputFile 上传路径

*/

public static String upload(String inputFile, String outputFile) {

logger.info("上传文件,inputFile:{},outputFile:{}", inputFile, outputFile);

long dateTimeStart = System.currentTimeMillis();

boolean result = Boolean.FALSE;

FileInputStream fis = null;

BufferedInputStream bis = null;

InputStreamReader isr = null;

BufferedReader in = null;

FileWriter fw = null;

try {

File srcfile = new File(inputFile);

File file = new File(outputFile);

//如果文件夹不存在则创建

if (!file.exists()) {

logger.info("文件保存路径不存在,创建保存路径:{}", outputFile);

if (file.mkdirs()) {

logger.info("文件保存路径生成成功:{}", outputFile);

}

}

fis = new FileInputStream(srcfile);

bis = new BufferedInputStream(fis);

isr = new InputStreamReader(bis, "utf-8");

in = new BufferedReader(isr, 10 * 1024 * 1024);//10M

outputFile = outputFile + File.separatorChar + srcfile.getName();

fw = new FileWriter(outputFile);

String line = null;

while (in.ready()) {

line = in.readLine();

fw.append(line).append("

");

}

fw.flush();

result = Boolean.TRUE;

} catch (IOException e) {

logger.error("上传文件异常", e);

} finally {

try {

if (fis != null) fis.close();

if (bis != null) bis.close();

if (isr != null) isr.close();

if (in != null) in.close();

if (fw != null) fw.close();

} catch (Exception e) {

logger.error("上传文件关闭文件流异常", e);

}

}

logger.info("上传文件:{}", System.currentTimeMillis() - dateTimeStart);

return result? outputFile : null;

}

/**

* 读取文件内容

* 读客户端大文件

* @return

*/

public static List<String> read(MultipartFile file) {

List<String> resultList = null;

InputStream is = null;

BufferedInputStream bis = null;

InputStreamReader isr = null;

BufferedReader in = null;

try {

is = file.getInputStream();

bis = new BufferedInputStream(is);

isr = new InputStreamReader(bis, "utf-8");

in = new BufferedReader(isr, 10 * 1024 * 1024);//10M

resultList = new ArrayList<>();

while (in.ready()) {

resultList.add(in.readLine());

}

}catch (Exception e){

logger.error("读取文件异常", e);

} finally {

try {

if (is != null) is.close();

if (bis != null) bis.close();

if (isr != null) isr.close();

if (in != null) in.close();

} catch (IOException e) {

logger.error("读取文件关闭文件流异常", e);

}

}

return resultList;

}

/**

* 读取文件内容

* 读服务器端大文件

* @param fileName 来源路径

*/

public static List<String> read(String fileName) {

logger.info("读出文件内容操作,文件路径:{}", fileName);

long dateTimeStart = System.currentTimeMillis();

List<String> resultList = null;

FileInputStream fis = null;

BufferedInputStream bis = null;

InputStreamReader isr = null;

BufferedReader in = null;

try {

File file = new File(fileName);

if (!file.exists()) {

logger.info("读出文件不存在,文件路径:{}", fileName);

return resultList;

}

fis = new FileInputStream(file);

bis = new BufferedInputStream(fis);

isr = new InputStreamReader(bis, "utf-8");

in = new BufferedReader(isr, 10 * 1024 * 1024);//10M

resultList = new ArrayList<>();

while (in.ready()) {

resultList.add(in.readLine());

}

} catch (IOException e) {

logger.error("读取文件异常", e);

}finally {

try {

if (in != null) in.close();

if (fis != null) fis.close();

if (bis != null) bis.close();

if (isr != null) isr.close();

} catch (IOException e) {

logger.error("读取文件关闭文件流异常", e);

}

}

logger.info("读出文件内容耗时:{}", System.currentTimeMillis() - dateTimeStart);

return resultList;

}

/**

* 判断字符串中是否包含中文

* @param str

* 待校验字符串

* @return 是否为中文

* @warn 不能校验是否为中文标点符号

*/

public static boolean isContainChinese(String str) {

Pattern p = Pattern.compile("[u4e00-u9fa5]");

Matcher m = p.matcher(str);

if (m.find()) {

return true;

}

return false;

}

/**

* 文件大小

*

* @param :multipartFile:上传的文件

* @param unit:限制单位(B,K,M,G)

* @return 文件大小

*/

public static double checkFileSize(MultipartFile multipartFile,String unit) {

long len = multipartFile.getSize();//上传文件的大小, 单位为字节.

//准备接收换算后文件大小的容器

double fileSize = 0.0d;

if ("B".equals(unit.toUpperCase())) {

fileSize = (double) len;

} else if ("K".equals(unit.toUpperCase()) || "KB".equals(unit.toUpperCase())) {

fileSize = (double) len / 1024;

} else if ("M".equals(unit.toUpperCase()) || "MB".equals(unit.toUpperCase())) {

fileSize = (double) len / 1048576;

} else if ("G".equals(unit.toUpperCase()) || "GB".equals(unit.toUpperCase())) {

fileSize = (double) len / 1073741824;

}

return fileSize;

}

/**

* 判断文件大小

*

* @param :multipartFile:上传的文件

* @param sizeLimit: 限制大小

* @param unit:限制单位(B,K,M,G)

* @return boolean:是否大于

*/

public static boolean fileIsTooBig(MultipartFile multipartFile, int sizeLimit, String unit) {

//准备接收换算后文件大小的容器

double fileSize = checkFileSize(multipartFile, unit);

//如果上传文件大于限定的容量

if (fileSize > sizeLimit) {

return true;

}

return false;

}

public static String getProjRoot() {

return System.getProperty("emp.dir");

}

}

 

以上是 FileUtils工具类 的全部内容, 来源链接: utcz.com/z/512546.html

回到顶部