New file |
| | |
| | | package com.hx.util; |
| | | |
| | | import org.apache.commons.fileupload.FileItem; |
| | | import org.apache.commons.fileupload.disk.DiskFileItemFactory; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import org.springframework.web.multipart.commons.CommonsMultipartFile; |
| | | |
| | | import java.io.*; |
| | | import java.net.URL; |
| | | import java.net.URLConnection; |
| | | import java.util.Base64; |
| | | |
| | | /** |
| | | * 文件转换工具类 |
| | | * @USER: fhx |
| | | * @DATE: 2022/3/2 |
| | | **/ |
| | | public class FileConvertTool { |
| | | |
| | | private static final int BUFFER_SIZE = 2 * 1024; |
| | | |
| | | |
| | | /** 获取网络路径文件流 */ |
| | | public static InputStream getUrlFile(String urlPath) throws IOException { |
| | | if(StringUtils.isEmpty(urlPath)){ |
| | | return null; |
| | | } |
| | | // 构造URL |
| | | URL url = new URL(urlPath); |
| | | // 打开连接 |
| | | URLConnection con = url.openConnection(); |
| | | //设置请求超时为5s |
| | | con.setConnectTimeout(5*1000); |
| | | // 输入流 |
| | | InputStream is = con.getInputStream(); |
| | | return is; |
| | | } |
| | | |
| | | /** |
| | | * 获取文件base64字符串 |
| | | * @param urlPath 文件路径 |
| | | * @return |
| | | * @throws IOException |
| | | */ |
| | | public static String getFileBaseStrByUrl(String urlPath) throws IOException { |
| | | InputStream is = getUrlFile(urlPath); |
| | | byte[] bytes = IOUtils.toByteArray(is); |
| | | String encoded = Base64.getEncoder().encodeToString(bytes); |
| | | return encoded; |
| | | } |
| | | |
| | | // inputStream转outputStream |
| | | public static ByteArrayOutputStream parse(final InputStream in) throws Exception { |
| | | final ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); |
| | | int ch; |
| | | while ((ch = in.read()) != -1) { |
| | | swapStream.write(ch); |
| | | } |
| | | return swapStream; |
| | | } |
| | | |
| | | // outputStream转inputStream |
| | | public static ByteArrayInputStream parse(final OutputStream out) throws Exception { |
| | | ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| | | baos = (ByteArrayOutputStream) out; |
| | | final ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray()); |
| | | return swapStream; |
| | | } |
| | | |
| | | // inputStream转String |
| | | public static String parse_String(final InputStream in) throws Exception { |
| | | final ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); |
| | | int ch; |
| | | while ((ch = in.read()) != -1) { |
| | | swapStream.write(ch); |
| | | } |
| | | return swapStream.toString(); |
| | | } |
| | | |
| | | // OutputStream 转String |
| | | public static String parse_String(final OutputStream out) throws Exception { |
| | | ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| | | baos = (ByteArrayOutputStream) out; |
| | | final ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray()); |
| | | return swapStream.toString(); |
| | | } |
| | | |
| | | // String转inputStream |
| | | public static ByteArrayInputStream parse_inputStream(final String in) throws Exception { |
| | | final ByteArrayInputStream input = new ByteArrayInputStream(in.getBytes()); |
| | | return input; |
| | | } |
| | | |
| | | // String 转outputStream |
| | | public static ByteArrayOutputStream parse_outputStream(final String in) throws Exception { |
| | | return parse(parse_inputStream(in)); |
| | | } |
| | | |
| | | /** |
| | | * 根据byte数组,生成文件 |
| | | */ |
| | | public static File getFile(byte[] bfile, String filePath,String fileName) { |
| | | BufferedOutputStream bos = null; |
| | | FileOutputStream fos = null; |
| | | File file = null; |
| | | try { |
| | | File dir = new File(filePath); |
| | | if(!dir.exists()&&dir.isDirectory()){//判断文件目录是否存在 |
| | | dir.mkdirs(); |
| | | } |
| | | file = new File(filePath+"\\"+fileName); |
| | | fos = new FileOutputStream(file); |
| | | bos = new BufferedOutputStream(fos); |
| | | bos.write(bfile); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (bos != null) { |
| | | try { |
| | | bos.close(); |
| | | } catch (IOException e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | if (fos != null) { |
| | | try { |
| | | fos.close(); |
| | | } catch (IOException e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | return file; |
| | | } |
| | | |
| | | /** |
| | | * 根据byte数组,生成文件 |
| | | */ |
| | | public static File getFile(InputStream in, String filePath, String fileName) { |
| | | if(in == null){ |
| | | return null; |
| | | } |
| | | BufferedOutputStream bos = null; |
| | | FileOutputStream fos = null; |
| | | File file = null; |
| | | try { |
| | | File dir = new File(filePath); |
| | | //判断文件目录是否存在 |
| | | if(!dir.exists()){ |
| | | dir.mkdirs(); |
| | | } |
| | | file = new File(filePath+"/"+fileName); |
| | | fos = new FileOutputStream(file); |
| | | byte[] b = new byte[BUFFER_SIZE]; |
| | | // while ((in.read(b)) != -1) { |
| | | // fos.write(b); // 写入数据 |
| | | // } |
| | | int len; |
| | | while ((len = in.read(b)) != -1){ |
| | | fos.write(b, 0, len); |
| | | } |
| | | in.close(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (bos != null) { |
| | | try { |
| | | bos.close(); |
| | | } catch (IOException e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | if (fos != null) { |
| | | try { |
| | | fos.close(); |
| | | } catch (IOException e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | return file; |
| | | } |
| | | |
| | | /** |
| | | * 根据byte数组,生成文件 |
| | | */ |
| | | public static File getFile(String baseIn, String filePath, String fileName) { |
| | | if(baseIn == null){ |
| | | return null; |
| | | } |
| | | |
| | | BufferedOutputStream bos = null; |
| | | FileOutputStream fos = null; |
| | | File file = null; |
| | | try { |
| | | InputStream in = parse_inputStream(baseIn); |
| | | if(in == null){ |
| | | return null; |
| | | } |
| | | File dir = new File(filePath); |
| | | //判断文件目录是否存在 |
| | | if(!dir.exists()){ |
| | | dir.mkdirs(); |
| | | } |
| | | file = new File(filePath+"/"+fileName); |
| | | fos = new FileOutputStream(file); |
| | | byte[] b = new byte[BUFFER_SIZE]; |
| | | // while ((in.read(b)) != -1) { |
| | | // fos.write(b); // 写入数据 |
| | | // } |
| | | int len; |
| | | while ((len = in.read(b)) != -1){ |
| | | fos.write(b, 0, len); |
| | | } |
| | | in.close(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (bos != null) { |
| | | try { |
| | | bos.close(); |
| | | } catch (IOException e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | if (fos != null) { |
| | | try { |
| | | fos.close(); |
| | | } catch (IOException e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | return file; |
| | | } |
| | | |
| | | /** |
| | | * 获得指定文件的byte数组 |
| | | */ |
| | | private static byte[] getBytes(String filePath){ |
| | | byte[] buffer = null; |
| | | try { |
| | | File file = new File(filePath); |
| | | FileInputStream fis = new FileInputStream(file); |
| | | ByteArrayOutputStream bos = new ByteArrayOutputStream(1000); |
| | | byte[] b = new byte[1000]; |
| | | int n; |
| | | while ((n = fis.read(b)) != -1) { |
| | | bos.write(b, 0, n); |
| | | } |
| | | fis.close(); |
| | | bos.close(); |
| | | buffer = bos.toByteArray(); |
| | | } catch (FileNotFoundException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return buffer; |
| | | } |
| | | |
| | | public static MultipartFile getMultipartFile(File file) { |
| | | FileItem item = new DiskFileItemFactory().createItem("file" |
| | | , MediaType.MULTIPART_FORM_DATA_VALUE |
| | | , true |
| | | , file.getName()); |
| | | try (InputStream input = new FileInputStream(file); |
| | | OutputStream os = item.getOutputStream()) { |
| | | // 流转移 |
| | | IOUtils.copy(input, os); |
| | | } catch (Exception e) { |
| | | throw new IllegalArgumentException("Invalid file: " + e, e); |
| | | } |
| | | |
| | | return new CommonsMultipartFile(item); |
| | | } |
| | | |
| | | /** |
| | | * 根据路径删除指定的目录或文件,无论存在与否 |
| | | *@param sPath 要删除的目录或文件 |
| | | *@return 删除成功返回 true,否则返回 false。 |
| | | */ |
| | | public static boolean deleteFolder(String sPath) { |
| | | File file = new File(sPath); |
| | | // 判断目录或文件是否存在 |
| | | if (!file.exists()) { |
| | | // 不存在返回 true |
| | | return true; |
| | | } else { |
| | | // 判断是否为文件 |
| | | if (file.isFile()) { // 为文件时调用删除文件方法 |
| | | return deleteFile(sPath); |
| | | } else { // 为目录时调用删除目录方法 |
| | | return deleteDirectory(sPath); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 删除单个文件 |
| | | * @param sPath 被删除文件的文件名 |
| | | * @return 单个文件删除成功返回true,否则返回false |
| | | */ |
| | | public static boolean deleteFile(String sPath) { |
| | | File file = new File(sPath); |
| | | // 路径为文件且不为空则进行删除 |
| | | if (file.isFile() && file.exists()) { |
| | | file.delete(); |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 删除目录(文件夹)以及目录下的文件 |
| | | * @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; |
| | | } |
| | | } |
| | | } |