package com.rymcu.vertical.util; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.net.URLEncoder; /** * 文件操作工具类 * @author 张代浩 * */ public class FileUtils { private static final Logger logger = LoggerFactory.getLogger(FileUtils.class); /** * 获取文件扩展名 * * @param filename * @return */ public static String getExtend(String filename) { return getExtend(filename, ""); } /** * 获取文件扩展名 * * @param filename * @return */ public static String getExtend(String filename, String defExt) { if ((filename != null) && (filename.length() > 0)) { int i = filename.lastIndexOf('.'); if ((i > 0) && (i < (filename.length() - 1))) { return (filename.substring(i+1)).toLowerCase(); } } return defExt.toLowerCase(); } /** * 获取文件名称[不含后缀名] * * @param * @return String */ public static String getFilePrefix(String fileName) { int splitIndex = fileName.lastIndexOf("."); return fileName.substring(0, splitIndex).replaceAll("\\s*", ""); } /** * 获取文件名称[不含后缀名] * 不去掉文件目录的空格 * @param * @return String */ public static String getFilePrefix2(String fileName) { int splitIndex = fileName.lastIndexOf("."); return fileName.substring(0, splitIndex); } /** * 文件复制 *方法摘要:这里一句话描述方法的用途 *@param *@return void */ public static void copyFile(String inputFile,String outputFile) throws FileNotFoundException{ File sFile = new File(inputFile); File tFile = new File(outputFile); FileInputStream fis = new FileInputStream(sFile); FileOutputStream fos = new FileOutputStream(tFile); int temp = 0; byte[] buf = new byte[10240]; try { while((temp = fis.read(buf))!=-1){ fos.write(buf, 0, temp); } } catch (IOException e) { e.printStackTrace(); } finally{ try { fis.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 判断文件是否为图片
*
* * @param filename * 文件名
* 判断具体文件类型
* @return 检查后的结果
* @throws Exception */ public static boolean isPicture(String filename) { // 文件名称为空的场合 if (StringUtils.isBlank(filename)) { // 返回不和合法 return false; } // 获得文件后缀名 //String tmpName = getExtend(filename); String tmpName = filename; // 声明图片后缀名数组 String imgeArray[][] = { { "bmp", "0" }, { "dib", "1" }, { "gif", "2" }, { "jfif", "3" }, { "jpe", "4" }, { "jpeg", "5" }, { "jpg", "6" }, { "png", "7" }, { "tif", "8" }, { "tiff", "9" }, { "ico", "10" } }; // 遍历名称数组 for (int i = 0; i < imgeArray.length; i++) { // 判断单个类型文件的场合 if (imgeArray[i][0].equals(tmpName.toLowerCase())) { return true; } } return false; } /** * 判断文件是否为DWG
*
* * @param filename * 文件名
* 判断具体文件类型
* @return 检查后的结果
* @throws Exception */ public static boolean isDwg(String filename) { // 文件名称为空的场合 if (oConvertUtils.isEmpty(filename)) { // 返回不和合法 return false; } // 获得文件后缀名 String tmpName = getExtend(filename); // 声明图片后缀名数组 if (tmpName.equals("dwg")) { return true; } return false; } /** * 删除指定的文件 * * @param strFileName * 指定绝对路径的文件名 * @return 如果删除成功true否则false */ public static boolean delete(String strFileName) { File fileDelete = new File(strFileName); if (!fileDelete.exists() || !fileDelete.isFile()) { logger.info("错误: " + strFileName + "不存在!"); return false; } //LogUtil.info("--------成功删除文件---------"+strFileName); return fileDelete.delete(); } /** * * @Title: encodingFileName 2015-11-26 huangzq add * @Description: 防止文件名中文乱码含有空格时%20 * @param @param fileName * @param @return 设定文件 * @return String 返回类型 * @throws */ public static String encodingFileName(String fileName) { String returnFileName = ""; try { returnFileName = URLEncoder.encode(fileName, "UTF-8"); returnFileName = StringUtils.replace(returnFileName, "+", "%20"); if (returnFileName.length() > 150) { returnFileName = new String(fileName.getBytes("GB2312"), "ISO8859-1"); returnFileName = StringUtils.replace(returnFileName, " ", "%20"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); //LogUtil.info("Don't support this encoding ..."); } return returnFileName; } /** * 根据现有路径获取SWF文件名称 * @author taoYan * @since 2018年7月26日 */ public static String getSwfPath(String path){ String leftSlash = "/"; if(!File.separator.equals(leftSlash)){ path = path.replace(File.separator,leftSlash); } String fileDir = path.substring(0,path.lastIndexOf(leftSlash)+1);//文件目录带/ int pointPosition = path.lastIndexOf("."); String fileName = path.substring(path.lastIndexOf(leftSlash)+1,pointPosition);//文件名不带后缀 String swfName = "";//PinyinUtil.getPinYinHeadChar(fileName);// 取文件名首字母作为SWF文件名 return fileDir+swfName+".swf"; } /** * 上传txt文件,防止乱码 * @author taoYan * @since 2018年7月26日 */ public static void uploadTxtFile(MultipartFile mf, String savePath) throws IOException{ //利用utf-8字符集的固定首行隐藏编码原理 //Unicode:FF FE UTF-8:EF BB byte[] allbytes = mf.getBytes(); try{ String head1 = toHexString(allbytes[0]); //System.out.println(head1); String head2 = toHexString(allbytes[1]); //System.out.println(head2); if("ef".equals(head1) && "bb".equals(head2)){ //UTF-8 String contents = new String(mf.getBytes(),"UTF-8"); if(StringUtils.isNotBlank(contents)){ OutputStream out = new FileOutputStream(savePath); out.write(contents.getBytes()); out.close(); } } else { //GBK String contents = new String(mf.getBytes(),"GBK"); OutputStream out = new FileOutputStream(savePath); out.write(contents.getBytes()); out.close(); } } catch(Exception e){ String contents = new String(mf.getBytes(),"UTF-8"); if(StringUtils.isNotBlank(contents)){ OutputStream out = new FileOutputStream(savePath); out.write(contents.getBytes()); out.close(); } } } public static String toHexString(int index){ String hexString = Integer.toHexString(index); // 1个byte变成16进制的,只需要2位就可以表示了,取后面两位,去掉前面的符号填充 hexString = hexString.substring(hexString.length() -2); return hexString; } }