package com.fdkk.sxz.util; import com.alibaba.fastjson.JSONObject; import com.github.junrar.Archive; import com.github.junrar.rarfile.FileHeader; import lombok.extern.slf4j.Slf4j; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.springframework.util.ResourceUtils; import sun.misc.BASE64Decoder; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import java.util.*; @Slf4j public class FileUtils { //文件路径+名称 private static String fileNameTemp; public static void uploadImg(String path, String base64Data) throws Exception { byte[] bt = null; try { BASE64Decoder decoder = new BASE64Decoder(); if (base64Data.startsWith("data:image/png;base64,")) { bt = decoder.decodeBuffer(base64Data.replace("data:image/png;base64,", "")); } else if (base64Data.startsWith("data:image/jpeg;base64,")) { bt = decoder.decodeBuffer(base64Data.replace("data:image/jpeg;base64,", "")); } else if (base64Data.startsWith("data:image/bmp;base64,")) { bt = decoder.decodeBuffer(base64Data.replace("data:image/bmp;base64,", "")); } else { return; } writeBinary(bt, path); } catch (IOException e) { e.printStackTrace(); } } public static void writeBinary(byte[] buf, String filePath) throws Exception { File fout = new File(filePath); if (!fout.getParentFile().exists()) { fout.getParentFile().mkdirs(); } FileOutputStream fos = new FileOutputStream(fout); ByteArrayInputStream stream = new ByteArrayInputStream(buf); BufferedOutputStream bos = new BufferedOutputStream(fos);//设置输出路径 BufferedInputStream bis = new BufferedInputStream(stream); int b = -1; while ((b = bis.read()) != -1) { bos.write(b); } bis.close(); bos.close(); } public static boolean createDir(String destDirName) { File dir = new File(destDirName); if (dir.exists()) { System.out.println("创建目录" + destDirName + "失败,目标目录已经存在"); return false; } if (!destDirName.endsWith(File.separator)) { destDirName = destDirName + File.separator; } //创建目录 if (dir.mkdirs()) { System.out.println("创建目录" + destDirName + "成功!"); return true; } else { System.out.println("创建目录" + destDirName + "失败!"); return false; } } /** * 创建文件 * @param fileName 文件名称 * @param fileContent 文件内容 * @return 是否创建成功,成功则返回true */ public static boolean createFile(String path, String fileName,String fileContent){ Boolean bool = false; fileNameTemp = path+fileName+".json";//文件路径+名称+文件类型 File file = new File(fileNameTemp); try { File folder = new File(path); if (!folder.exists()){ folder.mkdirs(); } //如果文件不存在,则创建新的文件 if(!file.exists()){ file.createNewFile(); bool = true; System.out.println("success create file,the file is "+ fileNameTemp); //创建文件成功后,写入内容到文件里 writeFileContent(fileNameTemp, fileContent); } } catch (Exception e) { e.printStackTrace(); } return bool; } /** * 向文件中写入内容 * @param filePath 文件路径与名称 * @param newstr 写入的内容 * @return * @throws IOException */ public static boolean writeFileContent(String filePath, String newstr) throws IOException{ Boolean bool = false; String filein = newstr+"\r\n";//新写入的行,换行 String temp = ""; FileInputStream fis = null; InputStreamReader isr = null; BufferedReader br = null; FileOutputStream fos = null; PrintWriter pw = null; try { File file = new File(filePath);//文件路径(包括文件名称) //将文件读入输入流 fis = new FileInputStream(file); isr = new InputStreamReader(fis); br = new BufferedReader(isr); StringBuffer buffer = new StringBuffer(); //文件原有内容 for(int i=0;(temp =br.readLine())!=null;i++){ buffer.append(temp); // 行与行之间的分隔符 相当于“\n” buffer = buffer.append(System.getProperty("line.separator")); } buffer.append(filein); fos = new FileOutputStream(file); pw = new PrintWriter(fos); pw.write(buffer.toString().toCharArray()); pw.flush(); bool = true; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { //不要忘记关闭 if (pw != null) { pw.close(); } if (fos != null) { fos.close(); } if (br != null) { br.close(); } if (isr != null) { isr.close(); } if (fis != null) { fis.close(); } } return bool; } /** * 删除单个文件 * * @param fileName * 要删除的文件的文件名 * @return 单个文件删除成功返回true,否则返回false */ public static boolean deleteFile(String fileName) { File file = new File(fileName); if (file.exists() && file.isFile()) { if (file.delete()) { return true; } else { return false; } } else { return false; } } /** * 根据路径删除指定的目录,无论存在与否 *@param sPath 要删除的目录path *@return 删除成功返回 true,否则返回 false。 */ public static boolean deleteFolder(String sPath) { boolean flag = false; File file = new File(sPath); // 判断目录或文件是否存在 if (!file.exists()) { // 不存在返回 false return flag; } else { // 判断是否为文件 if (file.isFile()) { // 为文件时调用删除文件方法 return deleteFile(sPath); } else { // 为目录时调用删除目录方法 return deleteDirectory(sPath); } } } /** * 删除目录以及目录下的文件 * @param sPath 被删除目录的路径 * @return 目录删除成功返回true,否则返回false */ public static boolean deleteDirectory(String sPath) { //如果sPath不以文件分隔符结尾,自动添加文件分隔符 if (!sPath.endsWith(File.separator)) { sPath = sPath + File.separator; } File dirFile = new File(sPath); //如果dir对应的文件不存在,或者不是一个目录,则退出 if (!dirFile.exists() || !dirFile.isDirectory()) { return false; } boolean flag = true; //删除文件夹下的所有文件(包括子目录) File[] files = dirFile.listFiles(); for (int i = 0; i < files.length; i++) { //删除子文件 if (files[i].isFile()) { flag = deleteFile(files[i].getAbsolutePath()); if (!flag) break; } //删除子目录 else { flag = deleteDirectory(files[i].getAbsolutePath()); if (!flag) break; } } if (!flag) return false; //删除当前目录 if (dirFile.delete()) { return true; } else { return false; } } //按行读文件 public static String readFile(String path) throws Exception { File f = new File(path); if (!f.exists()) { return null; } ByteArrayOutputStream bos = new ByteArrayOutputStream((int) f.length()); BufferedInputStream in = null; try { in = new BufferedInputStream(new FileInputStream(f)); int buf_size = 1024; byte[] buffer = new byte[buf_size]; int len = 0; while (-1 != (len = in.read(buffer, 0, buf_size))) { bos.write(buffer, 0, len); } return bos.toString(); } catch (IOException e) { e.printStackTrace(); throw e; } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } bos.close(); } } public static boolean copyFile(String srcFileName, String destFileName, boolean overlay) { File srcFile = new File(srcFileName); // 判断源文件是否存在 if (!srcFile.exists()) { return false; } else if (!srcFile.isFile()) { return false; } // 判断目标文件是否存在 File destFile = new File(destFileName); if (destFile.exists()) { // 如果目标文件存在并允许覆盖 if (overlay) { // 删除已经存在的目标文件,无论目标文件是目录还是单个文件 new File(destFileName).delete(); } } else { // 如果目标文件所在目录不存在,则创建目录 if (!destFile.getParentFile().exists()) { // 目标文件所在目录不存在 if (!destFile.getParentFile().mkdirs()) { // 复制文件失败:创建目标文件所在目录失败 return false; } } } // 复制文件 int byteread = 0; // 读取的字节数 InputStream in = null; OutputStream out = null; try { in = new FileInputStream(srcFile); out = new FileOutputStream(destFile); byte[] buffer = new byte[1024]; while ((byteread = in.read(buffer)) != -1) { out.write(buffer, 0, byteread); } return true; } catch (IOException e) { return false; } finally { try { if (out != null) out.close(); if (in != null) in.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 从网络Url中下载文件 * * @param urlStr * @param fileName * @param savePath * @return * @throws IOException */ public static boolean downLoadFromUrl(String urlStr, String fileName, String savePath){ FileOutputStream fos = null; InputStream inputStream = null; try { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置超时间为3秒 conn.setConnectTimeout(3 * 1000); // 防止屏蔽程序抓取而返回403错误 conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); // 得到输入流 inputStream = conn.getInputStream(); // 获取自己数组 byte[] getData = readInputStream(inputStream); // 文件保存位置 File saveDir = new File(savePath); if (!saveDir.exists()) { saveDir.mkdirs(); } String filePath = saveDir + File.separator + fileName; String filePathFolder = filePath.substring(0, filePath.lastIndexOf("/") + 1); FileUtils.createDir(filePathFolder); File file = new File(filePath); fos = new FileOutputStream(file); fos.write(getData); if (fos != null) { fos.close(); } if (inputStream != null) { inputStream.close(); } log.info("info:" + url + " download success"); } catch(FileNotFoundException e){ return false; } catch (IOException e) { return false; }finally { if (fos != null) { try { fos.close(); } catch (IOException e) { log.error("下载文件异常", e); } } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { log.error("下载文件异常", e); } } } return true; } /** * 从输入流中获取字节数组 * * @param inputStream * @return * @throws IOException */ private static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); } bos.close(); return bos.toByteArray(); } public static void writeFile(String filePath,String str) throws IOException { File fout = new File(filePath); if(!fout.getParentFile().exists()){ fout.getParentFile().mkdirs(); } if(!fout.exists()){ fout.createNewFile(); } FileOutputStream fos = new FileOutputStream(fout); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos)); bw.write(str); bw.close(); } /** * 将byte数组写入文件 * * @param path * @param fileName * @param content * @throws IOException */ public static void writeFile(String path, String fileName, byte[] content) throws IOException { try { File f = new File(path); if (!f.exists()) { f.mkdirs(); } FileOutputStream fos = new FileOutputStream(path + fileName); fos.write(content); fos.close(); } catch (IOException e) { throw new RuntimeException(e); } } /** * 向json文件写入参数,重复的覆盖,多的新增 * @return */ public static void writeJsonFile(String path, Map map) throws Exception{ String str = readFile(path); JSONObject json = new JSONObject(); if(str!=null){ json = JSONObject.parseObject(str); } else{ File file = new File(path); if(!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } if(!file.exists()) { file.createNewFile(); } } Iterator entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry entry = (Map.Entry) entries.next(); json.put(String.valueOf(entry.getKey()), entry.getValue()); } writeFile(path, json.toString()); } //删除文件夹 public static void delFolder(String folderPath) { try { delAllFile(folderPath); //删除完里面所有内容 String filePath = folderPath; filePath = filePath.toString(); File myFilePath = new File(filePath); myFilePath.delete(); //删除空文件夹 } catch (Exception e) { e.printStackTrace(); } } //删除指定文件夹下的所有文件 public static boolean delAllFile(String path) { boolean flag = false; File file = new File(path); if (!file.exists()) { return flag; } if (!file.isDirectory()) { return flag; } String[] tempList = file.list(); File temp = null; if(tempList!=null) { for (int i = 0; i < tempList.length; i++) { if (path.endsWith(File.separator)) { temp = new File(path + tempList[i]); } else { temp = new File(path + File.separator + tempList[i]); } if (temp.isFile()) { temp.delete(); } if (temp.isDirectory()) { delAllFile(path + "/" + tempList[i]);//先删除文件夹里面的文件 delFolder(path + "/" + tempList[i]);//再删除空文件夹 flag = true; } } } //再删除当前空文件夹 file.delete(); return flag; } public static List readfileNamesForDirectory(String path, String except) { try{ File file = new File(path); if(file.isDirectory()) { String[] fileNames = file.list(); List list = new ArrayList(); if(fileNames!=null) { for(int i=0;i readfilePath(String path, List urlList) { try{ File file = new File(path); if(file != null && file.isDirectory()) { File[] files = file.listFiles(); if(files != null) { for(int i=0;i fileSize) { return false; } return true; } public static void decompress(String srcPath, String dest) throws Exception { File file = new File(srcPath); if (!file.exists()) { throw new RuntimeException(srcPath + "所指文件不存在"); } ZipFile zf = new ZipFile(file); Enumeration entries = zf.getEntries(); ZipEntry entry = null; while (entries.hasMoreElements()) { entry = (ZipEntry) entries.nextElement(); log.info("解压" + entry.getName()); if (entry.isDirectory()) { String dirPath = dest + "/" + entry.getName(); File dir = new File(dirPath); dir.mkdirs(); } else { // 表示文件 File f = new File(dest + "/" + entry.getName()); if (!f.exists()) { //String dirs = FileUtils.getParentPath(f); String dirs = f.getParent(); File parentDir = new File(dirs); parentDir.mkdirs(); } f.createNewFile(); // 将压缩文件内容写入到这个文件中 InputStream is = zf.getInputStream(entry); FileOutputStream fos = new FileOutputStream(f); int count; byte[] buf = new byte[8192]; while ((count = is.read(buf)) != -1) { fos.write(buf, 0, count); } is.close(); fos.close(); } } } public static void unRar(String srcPath, String outDir) throws Exception { File file = new File(srcPath); if (!file.exists()) { throw new RuntimeException(srcPath + "所指文件不存在"); } File outFileDir = new File(outDir); if (!outFileDir.exists()) { boolean isMakDir = outFileDir.mkdirs(); if (isMakDir) { System.out.println("创建压缩目录成功"); } } Archive archive = new Archive(new FileInputStream(file)); FileHeader fileHeader = archive.nextFileHeader(); while (fileHeader != null) { if (fileHeader.isDirectory()) { fileHeader = archive.nextFileHeader(); continue; } File out = new File(outDir + fileHeader.getFileNameString()); if (!out.exists()) { if (!out.getParentFile().exists()) { out.getParentFile().mkdirs(); } out.createNewFile(); } FileOutputStream os = new FileOutputStream(out); archive.extractFile(fileHeader, os); os.close(); fileHeader = archive.nextFileHeader(); } archive.close(); } //按行读文件 public static String readFileGBK(String filepath) throws Exception { File f = new File(filepath); if (!f.exists()) { return null; } BufferedReader buf = null; OutputStreamWriter pw=null; String str = null; String allstr=""; buf = new BufferedReader(new InputStreamReader(new FileInputStream(filepath), "GBK")); while((str = buf.readLine()) != null){ allstr=allstr+str; } buf.close(); return allstr; } public static void main(String[] args) throws Exception{ // File f = new File("F:\\桌面\\vr-t-2KZ4MQv"); // for(File f1 : f.listFiles()){ // f1.renameTo(new File(f1.getAbsolutePath().replace(".png", ".jpg"))); // } // String filePath = "F:\\桌面\\c11m-T11-EA\\log"; // String[] files = FileUtils.readFile("F:\\桌面\\c11m-T11-EA\\log\\files.txt").split(";"); // File target = null; // for (String file : files) { // target = new File(filePath + file); // System.out.println(target.getName()); // System.out.println(file); // } System.out.println(new String("WIv3YwqC\uFEFF")); System.out.println(new String("/web-shared/OneKeyDecorate/upload/WIv3YwqC/WIv3YwqC\uFEFF/WIv3YwqC.udatasmith")); // System.out.println(System.currentTimeMillis()); } }