package com.jiayue.biz.util; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.springframework.util.ResourceUtils; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.BasicFileAttributes; import java.security.MessageDigest; import java.util.Date; /** * 文件工具类 * * @author xsl * @version 3.0 */ @Slf4j public class FileUtil { /** * 移动本地文件 * * @param remoteAbsoluteFile 远程文件名(包括完整路径) * @param localAbsoluteFile 本地文件名(包括完整路径) * @return 成功时,返回true,失败返回false * @throws Exception */ public static void move(String localAbsoluteFile, String remoteAbsoluteFile) throws Exception { File srcFile = new File(localAbsoluteFile); File destDir = new File(remoteAbsoluteFile); try { if (!destDir.exists()) {// 如果目录不存在则创建目录 boolean b = destDir.mkdirs(); if (!b) // 如果创建失败则抛出异常 throw new RuntimeException(destDir + " 目录创建失败"); } File file = new File(remoteAbsoluteFile + File.separator + srcFile.getName()); if(file.exists()){ file.delete(); } FileUtils.moveFile(srcFile, new File(remoteAbsoluteFile + File.separator + srcFile.getName())); } catch (IOException e) { throw new Exception("文件:" + srcFile.getName() + "移动到" + destDir.getPath() + "失败。", e); } } //文件内容md5加密 public static String getMD5(byte[] fileByte) { String md5 = new String(); try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(fileByte); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } md5 = buf.toString(); } catch (Exception e) { e.printStackTrace(); } return md5; } /** * 获取文件创建时间 * * @param fullFileName * @return */ public static Long getFileCreateTime(String fullFileName) { Path path = Paths.get(fullFileName); BasicFileAttributeView basicview = Files.getFileAttributeView(path, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS); BasicFileAttributes attr; try { attr = basicview.readAttributes(); Date createDate = new Date(attr.creationTime().toMillis()); return createDate.getTime(); } catch (Exception e) { e.printStackTrace(); } return new Date().getTime(); } /** * 获取项目根路径 * * @return */ public static String getResourceBasePath() { // 获取跟目录 File path = null; try { path = new File(ResourceUtils.getURL("classpath:").getPath()); } catch (FileNotFoundException e) { // nothing to do } if (path == null || !path.exists()) { path = new File(""); } String pathStr = path.getAbsolutePath(); try { pathStr = URLDecoder.decode(pathStr, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // 如果是在eclipse中运行,则和target同级目录,如果是jar部署到服务器,则默认和jar包同级 // pathStr = pathStr.replace("\\target\\classes", ""); return pathStr; } //下载文件 public static void downloadFile(File file, HttpServletResponse response) { String name = file.getName(); FileInputStream fileInputStream = null; ServletOutputStream outputStream = null; try { fileInputStream = new FileInputStream(file); String encode = URLEncoder.encode(name, StandardCharsets.UTF_8.toString()); response.setContentType("application/octet-stream"); String percentEncodedFileName = encode.replaceAll("\\+", "%20"); String contentDispositionValue = "attachment; filename=" + percentEncodedFileName; response.setHeader("Content-disposition", contentDispositionValue); int len = 0; byte[] buffer = new byte[1024]; outputStream = response.getOutputStream(); while ((len = fileInputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, len); } fileInputStream.close(); outputStream.flush(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 获取上报文件目录相对路径 * * @return */ public static String getFileUploadPath() { return createUploadAllDir("uploadFile"); } /** * 获取上传测风塔附件相对路径 * * @return */ public static String getEnclosurePath() { return createUploadAllDir("enclosure"); } /** * 获取下载文件目录相对路径 * * @return */ public static String getDownloadFilePath() { return createUploadAllDir("downloadFile"); } /** * 获取下载文件目录相对路径 * * @return */ public static String getZxglFilePath() { return createUploadAllDir("zxgl"); } /** * 获取日志目录相对路径 * * @return */ public static String getLogsPath() { return createUploadAllDir("logs"); } /** * 获取系统脚本相对路径 * * @return */ public static String getBinPath() { return createUploadAllDir("bin"); } /** * 程序备份相对路径 * * @return */ public static String getOriginalPath() { return createUploadAllDir("original"); } /** * 系统资料相对路径 * * @return */ public static String getSystemFilePath() { return createUploadAllDir("systemFile"); } /** * 获取被删除文件目录 * * @return 路径 */ public static String getDeleteFilePath() { return createUploadAllDir("deleteFile"); } /** * 程序运行相对路径 * * @return */ public static String getProducePath() { return createUploadAllDir("produce"); } /** * 报表相对路径 * * @return */ public static String getreportFormPath() { return createUploadAllDir("reportForm"); } /** * 获取临时文件目录相对路径 * * @return */ public static String getTempFilePath() { return createUploadAllDir("tempFile"); } public static String getE46Path() { return createUploadAllDir("HN"); } private static String createUploadAllDir(String dir) { String path = ""; /*if (System.getProperties().getProperty("file.separator").equals("\\")) { path = new File(getResourceBasePath()).getParentFile().getParentFile().getParentFile().getAbsolutePath() + File.separator + dir; try { path = URLDecoder.decode(path, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } File file = new File(path); if (!file.exists()) { boolean b = file.mkdirs(); if (!b) log.error("目录创建失败" + path); } } else { path = "D:\\program\\" + dir; }*/ path = "D:\\program\\" + dir; return path; } /** * 获取环境数据导出文件目录相对路径 * * @return */ public static String getEnvironmentalDataFile() { return createUploadAllDir("environmentalDataFile"); } }