package com.example.xiaoshiweixinback.business.utils; import cn.hutool.core.util.IdUtil; import com.example.xiaoshiweixinback.XiaoshiWeixinbackApplication; import org.springframework.boot.system.ApplicationHome; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.net.URL; import java.nio.charset.StandardCharsets; @Service public class FileUtils { public static final String FILE_SEPARATOR = System.getProperty("file.separator"); public static final String COMMON_FILE = "file"; public static final String BACKUP_FILE = "backup"; public static String getStaticPath(String fileName) { //ApplicationHome类 返回target目录层级 ApplicationHome ah = new ApplicationHome(XiaoshiWeixinbackApplication.class); //获取 applicationHome 内的路径 ...\target\classes 到这一层级下 File file = ah.getSource(); //获取 file的parentFile 即最后一级之前的所有层级路径(包括盘符) 这里能获得到的最终层级为 ...\target 后续用FILE_SEPARATOR(系统路径分割通配符 即 "\") 以及fileName拼接生成存放文件的目录层级 即为根目录 root String rootPath = null; if (fileName != null && !fileName.equals("")) { rootPath = file.getParentFile().toString() + FILE_SEPARATOR + fileName; } else { rootPath = file.getParentFile().toString(); } //根据上方生成的根目录路径 生成对应文件夹 没有就新建 File root = new File(rootPath); if (!root.exists()) { root.mkdir(); } //返回的最终形式为 盘符:\项目层级\target\file return rootPath; } public static File getPictureFileByUrl(String dataUrl) throws IOException { URL url = new URL(dataUrl); //想要读取的url地址 InputStream in = url.openStream(); File file = File.createTempFile("new_url", ".jpg"); //创建文件 OutputStream os = new FileOutputStream(file); //创建文件输出流 int bytesRead; byte[] buffer = new byte[8192]; int len = 8192; while ((bytesRead = in.read(buffer, 0, len)) != -1) { os.write(buffer, 0, bytesRead); } //关闭释放流 os.close(); in.close(); return file; } public String analysisJsonFile(String configName) { if (configName == null) { configName = "uploadSetting.json"; } ApplicationHome ah = new ApplicationHome(ToolUtil.class); File file = ah.getSource(); String settingFilePath = file.getParentFile().toString() + FileUtils.FILE_SEPARATOR + configName; BufferedReader reader = null; StringBuilder last = new StringBuilder(); InputStreamReader inputStreamReader; try (FileInputStream fileInputStream = new FileInputStream(settingFilePath)) { inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); reader = new BufferedReader(inputStreamReader); String tempString; while ((tempString = reader.readLine()) != null) { last.append(tempString); } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return last.toString(); } public static File getFileByBytes(byte[] bytes, String prefix, String suffix) { BufferedOutputStream bos = null; FileOutputStream fos = null; File file = null; try { file = File.createTempFile(prefix, suffix); //输出流 fos = new FileOutputStream(file); //缓冲流 bos = new BufferedOutputStream(fos); //将字节数组写出 bos.write(bytes); return file; } catch (Exception e) { e.printStackTrace(); } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } return file; } } public static File multipartFileToFile(MultipartFile file) throws Exception { File toFile = null; if (file == null || file.equals("") || file.getSize() <= 0) { file = null; } else { InputStream ins = null; ins = file.getInputStream(); toFile = new File(file.getOriginalFilename()); inputStreamToFile(ins, toFile); ins.close(); } return toFile; } //获取流文件 private static void inputStreamToFile(InputStream ins, File file) { try { OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); ins.close(); } catch (Exception e) { e.printStackTrace(); } } }