zoukankan      html  css  js  c++  java
  • 分享一个文件的工具类

       1 package com.cn.shupu.util;
       2 
       3 import java.io.BufferedReader;
       4 import java.io.File;
       5 import java.io.FileInputStream;
       6 import java.io.FileNotFoundException;
       7 import java.io.FileOutputStream;
       8 import java.io.FileWriter;
       9 import java.io.IOException;
      10 import java.io.InputStream;
      11 import java.io.InputStreamReader;
      12 import java.io.OutputStream;
      13 import java.io.RandomAccessFile;
      14 import java.nio.ByteBuffer;
      15 import java.nio.channels.FileChannel;
      16 import java.text.DecimalFormat;
      17 import java.text.ParseException;
      18 import java.text.SimpleDateFormat;
      19 import java.util.ArrayList;
      20 import java.util.Arrays;
      21 import java.util.Collections;
      22 import java.util.Date;
      23 import java.util.HashMap;
      24 import java.util.List;
      25 import java.util.Map;
      26 import java.util.Random;
      27 
      28 import org.springframework.web.multipart.MultipartFile;
      29 import org.springframework.web.multipart.MultipartHttpServletRequest;
      30 import org.springframework.web.multipart.commons.CommonsMultipartFile;
      31 
      32 import net.sf.json.JSONObject;
      33 
      34 /**
      35  * 文件工具类 涵盖绝大多数的文件操作
      36  *  38  * @version 创建时间:2016年11月14日 下午3:03:21
      39  */
      40 public class FileTools {
      41     public FileTools() {
      42 
      43     }
      44 
      45     /**
      46      * formatPath 转义文件目录
      47      *
      48      * @param path
      49      * @return
      50      */
      51     public static String formatPath(String path) {
      52         return path.replaceAll("\\", "/");
      53     }
      54 
      55     /**
      56      * combainPath文件路径合并
      57      *
      58      * @param eins
      59      * @param zwei
      60      * @return
      61      */
      62     private static String combainPath(String eins, String zwei) {
      63         String dori = "";
      64         eins = null == eins ? "" : formatPath(eins);
      65         zwei = null == zwei ? "" : formatPath(zwei);
      66         if (!eins.endsWith("/") && zwei.indexOf("/") != 0) {
      67             dori = eins + "/" + zwei;
      68         } else {
      69             dori = (eins + zwei).replaceAll("//", "/");
      70         }
      71         return dori;
      72     }
      73 
      74     /**
      75      * list2Array 列表转换数组
      76      *
      77      * @param list
      78      * @return
      79      */
      80     private static String[] list2Array(List list) {
      81         String array[] = (String[]) list.toArray(new String[list.size()]);
      82         return array;
      83     }
      84 
      85     /**
      86      * cp 复制文件
      87      *
      88      * @param source
      89      * @param destination
      90      * @param loop
      91      * @return
      92      */
      93     public static List<File> cp(String source, String destination, boolean loop) {
      94         List<File> list = new ArrayList();
      95         try {
      96             File srcFile = new File(source);
      97             File desFile = new File(destination);
      98             list.addAll(cp(srcFile, desFile, loop));
      99         } catch (Exception ex) {
     100             ex.printStackTrace();
     101         }
     102         return list;
     103     }
     104 
     105     /**
     106      * cp 复制文件
     107      *
     108      * @param source
     109      * @param destination
     110      * @param loop
     111      * @return
     112      */
     113     public static List<File> cp(File source, File destination, boolean loop) {
     114         List<File> list = new ArrayList();
     115         try {
     116             if (!source.exists() || source.isDirectory()) {
     117                 throw new FileNotFoundException();
     118             }
     119             list.add(cp(source, destination));
     120             if (loop) {
     121                 String[] subFile = source.list();
     122                 for (String subPath : subFile) {
     123                     String src = combainPath(source.getPath(), subPath);// 子文件原文件路径
     124                     String des = combainPath(destination.getPath(), subPath);// 子文件目标路径
     125                     File subfile = new File(src);
     126                     if (subfile.isFile()) {
     127                         list.add(cp(src, des));
     128                     } else if (subfile.isDirectory() && loop) {
     129                         list.addAll(cp(src, des, loop));
     130                     }
     131                 }
     132             }
     133         } catch (Exception ex) {
     134             ex.printStackTrace();
     135         }
     136         return list;
     137     }
     138 
     139     /**
     140      * cp 单文件复制文件
     141      *
     142      * @param source
     143      * @param destination
     144      * @return
     145      */
     146     public static File cp(String source, String destination) {
     147         File desFile = null;
     148         try {
     149             File srcFile = new File(source);
     150             desFile = new File(destination);
     151             desFile = cp(srcFile, desFile);
     152         } catch (Exception ex) {
     153             ex.printStackTrace();
     154         }
     155         return desFile;
     156     }
     157 
     158     /**
     159      * cp 单文件复制文件
     160      *
     161      * @param source
     162      * @param destination
     163      * @return
     164      */
     165     public static File cp(File source, File destination) {
     166         FileInputStream in = null;
     167         FileOutputStream out = null;
     168         FileChannel inc = null;
     169         FileChannel outc = null;
     170         try {
     171             if (!source.exists() || source.isDirectory()) {
     172                 throw new FileNotFoundException();
     173             }
     174             if (source.getPath().equals(destination.getPath())) {
     175                 return source;
     176             }
     177             long allbytes = du(source, false);
     178             if (!destination.exists()) {
     179                 destination.createNewFile();
     180             }
     181             in = new FileInputStream(source.getPath());
     182             out = new FileOutputStream(destination);
     183             inc = in.getChannel();
     184             outc = out.getChannel();
     185             ByteBuffer byteBuffer = null;
     186             long length = 2097152;// 基本大小,默认2M
     187             long _2M = 2097152;
     188             while (inc.position() < inc.size()) {
     189                 if (allbytes > (64 * length)) {// 如果文件大小大于128M 缓存改为64M
     190                     length = 32 * _2M;
     191                 } else if (allbytes > (32 * length)) {// 如果文件大小大于64M 缓存改为32M
     192                     length = 16 * _2M;
     193                 } else if (allbytes > (16 * length)) {// 如果文件大小大于32M 缓存改为16M
     194                     length = 8 * _2M;
     195                 } else if (allbytes > (8 * length)) {// 如果文件大小大于16M 缓存改为8M
     196                     length = 4 * _2M;
     197                 } else if (allbytes > (4 * length)) {// 如果文件大小大于8M 缓存改为4M
     198                     length = 2 * _2M;
     199                 } else if (allbytes > (2 * length)) {// 如果文件大小大于4M 缓存改为2M
     200                     length = _2M;
     201                 } else if (allbytes > (length)) {// 如果文件大小大于2M 缓存改为1M
     202                     length = _2M / 2;
     203                 } else if (allbytes < length) {// 如果文件小于基本大小,直接输出
     204                     length = allbytes;
     205                 }
     206                 allbytes = inc.size() - inc.position();
     207                 byteBuffer = ByteBuffer.allocateDirect((int) length);
     208                 inc.read(byteBuffer);
     209                 byteBuffer.flip();
     210                 outc.write(byteBuffer);
     211                 outc.force(false);
     212             }
     213         } catch (Exception ex) {
     214             ex.printStackTrace();
     215         } finally {
     216             try {
     217                 if (null != inc) {
     218                     inc.close();
     219                 }
     220                 if (null != outc) {
     221                     outc.close();
     222                 }
     223                 if (null != in) {
     224                     in.close();
     225                 }
     226                 if (null != out) {
     227                     out.close();
     228                 }
     229             } catch (Exception ex) {
     230                 ex.printStackTrace();
     231             }
     232         }
     233         return destination;
     234     }
     235 
     236     /**
     237      * rename 文件重命名
     238      *
     239      * @param filePath
     240      * @param from
     241      * @param to
     242      * @return
     243      */
     244     public static File rename(String filePath, String from, String to) {
     245         File newFile = null;
     246         try {
     247             File oldFile = new File(combainPath(filePath, from));
     248             newFile = new File(combainPath(filePath, to));
     249             rename(newFile, oldFile);
     250         } catch (Exception ex) {
     251             ex.printStackTrace();
     252         }
     253         return newFile;
     254     }
     255 
     256     /**
     257      * rename 文件重命名
     258      *
     259      * @param to
     260      * @param from
     261      * @return
     262      */
     263     public static File rename(File from, File to) {
     264         try {
     265             String newPath = to.getPath();
     266             String oldPath = from.getPath();
     267             if (!oldPath.equals(newPath)) {
     268                 if (!to.exists()) {
     269                     from.renameTo(to);
     270                 }
     271             }
     272         } catch (Exception ex) {
     273             ex.printStackTrace();
     274         }
     275         return to;
     276     }
     277 
     278     /**
     279      * mv 移动文件
     280      *
     281      * @param fileName
     282      * @param source
     283      * @param destination
     284      * @param cover
     285      */
     286     public static void mv(String fileName, String source, String destination, boolean cover) {
     287         try {
     288             if (!source.equals(destination)) {
     289                 File oldFile = new File(combainPath(source, fileName));
     290                 File newFile = new File(combainPath(destination, fileName));
     291                 mv(oldFile, newFile, cover);
     292             }
     293         } catch (Exception ex) {
     294             ex.printStackTrace();
     295         }
     296     }
     297 
     298     /**
     299      * mv 移动文件
     300      *
     301      * @param source
     302      * @param destination
     303      * @param cover
     304      */
     305     public static void mv(String source, String destination, boolean cover) {
     306         try {
     307 
     308             if (!new File(destination).exists())
     309                 new File(destination).mkdirs();
     310 
     311             if (!source.equals(destination)) {
     312                 File oldFile = new File(source);
     313                 File newFile = new File(destination);
     314                 mv(oldFile, newFile, cover);
     315             }
     316         } catch (Exception ex) {
     317             ex.printStackTrace();
     318         }
     319     }
     320 
     321     /**
     322      * mv 移动文件
     323      *
     324      * @param source
     325      * @param destination
     326      * @param cover
     327      */
     328     public static void mv(File source, File destination, boolean cover) {
     329         try {
     330             if (!source.exists()) {
     331                 throw new FileNotFoundException();
     332             }
     333             StringBuilder fileName = new StringBuilder(source.getName());
     334             if (!cover && source.getPath().equals(destination.getPath())) {
     335 
     336                 if (fileName.indexOf(".") > 0) {
     337 
     338                     fileName.insert(fileName.lastIndexOf("."), "_副本");
     339 
     340                 } else {
     341                     fileName.append("_副本");
     342                 }
     343                 cp(source, new File(combainPath(source.getParent(), fileName.toString())));
     344             } else {
     345                 source.renameTo(destination);
     346             }
     347         } catch (Exception ex) {
     348             ex.printStackTrace();
     349         }
     350     }
     351 
     352     /**
     353      * extensions 获取文件扩展名信息
     354      *
     355      * @param filePath
     356      * @param fileName
     357      * @return
     358      */
     359     private static String[] extensions(String filePath, String fileName) {
     360         String[] extension = {};
     361         try {
     362             String fullPath = combainPath(filePath, fileName);
     363             File file = new File(fullPath);
     364             extensions(file);
     365         } catch (Exception ex) {
     366             ex.printStackTrace();
     367         }
     368         return extension;
     369     }
     370 
     371     /**
     372      * extensions 获取文件扩展名信息
     373      *
     374      * @param fullPath
     375      * @return
     376      */
     377     private static String[] extensions(String fullPath) {
     378         String[] extension = {};
     379         try {
     380             File file = new File(fullPath);
     381             extensions(file);
     382         } catch (Exception ex) {
     383             ex.printStackTrace();
     384         }
     385         return extension;
     386     }
     387 
     388     /**
     389      * extensions 获取文件扩展名信息
     390      *
     391      * @param file
     392      * @return
     393      */
     394     private static String[] extensions(File file) {
     395         String[] extension = {};
     396         try {
     397             if (file.isFile()) {
     398                 String fileName = file.getName();
     399                 if (fileName.lastIndexOf(".") >= 0) {
     400                     int lastIndex = fileName.lastIndexOf(".");
     401                     extension[0] = String.valueOf(lastIndex);// 扩展名的“.”的索引
     402                     extension[1] = fileName.substring(lastIndex + 1);// 扩展名
     403                     extension[2] = fileName.substring(0, lastIndex);// 文件名
     404                 }
     405             }
     406         } catch (Exception ex) {
     407             ex.printStackTrace();
     408         }
     409         return extension;
     410     }
     411 
     412     /**
     413      * ls 遍历文件
     414      *
     415      * @param filePath
     416      * @param loop
     417      * @return
     418      */
     419     public static List<File> ls(String filePath, boolean loop) {
     420         List<File> list = new ArrayList();
     421         try {
     422             File file = new File(filePath);
     423             list.addAll(ls(file, loop));
     424         } catch (Exception ex) {
     425             ex.printStackTrace();
     426         }
     427         return list;
     428     }
     429 
     430     /**
     431      * ls 遍历文件
     432      *
     433      * @param file
     434      * @param loop
     435      * @return
     436      */
     437     public static List<File> ls(File file, boolean loop) {
     438         List<File> list = new ArrayList();
     439         try {
     440             list.add(file);
     441             if (!file.isDirectory()) {
     442                 list.add(file);
     443             } else if (file.isDirectory()) {
     444                 File[] subList = file.listFiles();
     445                 subList = filesSort(subList, true);
     446                 for (File subFile : subList) {
     447                     if (subFile.isDirectory() && loop) {
     448                         list.addAll(ls(subFile.getPath(), loop));
     449                     } else {
     450                         list.add(subFile);
     451                     }
     452                 }
     453             }
     454         } catch (Exception ex) {
     455             ex.printStackTrace();
     456         }
     457         return list;
     458     }
     459 
     460     /**
     461      * ls 遍历文件
     462      *
     463      * @param filePath
     464      * @param loop
     465      * @return
     466      */
     467     public static List<File> getFiles(String filePath, boolean loop) {
     468         List<File> list = new ArrayList();
     469 
     470         try {
     471             File file = new File(filePath);
     472 
     473             list.addAll(getFiles(file, loop));
     474 
     475         } catch (Exception ex) {
     476             ex.printStackTrace();
     477         }
     478         return list;
     479     }
     480 
     481     /**
     482      * ls 遍历文件
     483      *
     484      * @param file
     485      * @param loop
     486      * @return
     487      */
     488     public static List<File> getFiles(File file, boolean loop) {
     489         List<File> list = new ArrayList();
     490         try {
     491             // list.add(file);
     492             if (!file.isDirectory()) {
     493                 list.add(file);
     494             } else if (file.isDirectory()) {
     495 
     496                 File[] subList = file.listFiles();
     497                 subList = filesSort(subList, true);
     498 
     499                 for (File subFile : subList) {
     500 
     501                     if (subFile.isDirectory() && loop) {
     502 
     503                         list.addAll(getFiles(subFile.getPath(), loop));
     504 
     505                     } else {
     506 
     507                         list.add(subFile);
     508 
     509                     }
     510 
     511                 }
     512 
     513             }
     514         } catch (Exception ex) {
     515             ex.printStackTrace();
     516         }
     517         return list;
     518     }
     519 
     520     /**
     521      * filesSort 文件排序(默认升序)
     522      *
     523      * @param parentPath
     524      * @param subList
     525      * @return
     526      */
     527     private static File[] filesSort(File[] inFiles, boolean asc) {
     528 
     529         List<String> files = new ArrayList();
     530 
     531         List<String> dirs = new ArrayList();
     532 
     533         for (File subFile : inFiles) {
     534             if (subFile.isDirectory()) {
     535                 dirs.add(subFile.getPath());
     536             } else if (subFile.isFile()) {
     537                 files.add(subFile.getPath());
     538             }
     539         }
     540 
     541         String[] fileArray = {};
     542 
     543         if (files.size() > 0) {
     544 
     545             fileArray = list2Array(files);
     546 
     547             Arrays.sort(fileArray);
     548 
     549             if (!asc) {
     550                 Arrays.sort(fileArray, Collections.reverseOrder());
     551             }
     552 
     553         }
     554         String[] dirArray = {};
     555         if (dirs.size() > 0) {
     556             dirArray = list2Array(dirs);
     557             Arrays.sort(dirArray);
     558             if (!asc) {
     559                 Arrays.sort(dirArray, Collections.reverseOrder());
     560             }
     561         }
     562         return concat2FileArray(fileArray, dirArray);
     563     }
     564 
     565     /**
     566      * concat2FileArray 合并文件数组
     567      *
     568      * @param old1
     569      * @param old2
     570      * @return
     571      */
     572     private static File[] concat2FileArray(String[] old1, String[] old2) {
     573         File[] newArray = new File[old1.length + old2.length];
     574         for (int i = 0, n = old1.length; i < n; i++) {
     575             newArray[i] = new File(old1[i]);
     576         }
     577         for (int i = 0, j = old1.length, n = (old1.length + old2.length); j < n; i++, j++) {
     578             newArray[j] = new File(old2[i]);
     579         }
     580         return newArray;
     581     }
     582 
     583     /**
     584      * read 读取文本文件
     585      *
     586      * @param filePath
     587      * @param fileName
     588      * @param charset
     589      * @return
     590      */
     591     public static StringBuilder read(String filePath, String fileName, String charset) {
     592         StringBuilder sb = new StringBuilder();
     593         try {
     594             String fullPath = combainPath(filePath, fileName);
     595             File file = new File(fullPath);
     596             sb.append(FileTools.tail(file, false, 0, charset));
     597         } catch (Exception ex) {
     598             ex.printStackTrace();
     599         }
     600         return sb;
     601     }
     602 
     603     /**
     604      * read 读取文本文件
     605      *
     606      * @param fullPath
     607      * @param charset
     608      * @return
     609      */
     610     public static StringBuilder read(String fullPath, String charset) {
     611         StringBuilder sb = new StringBuilder();
     612         try {
     613             File file = new File(fullPath);
     614             sb.append(FileTools.tail(file, false, 0, charset));
     615         } catch (Exception ex) {
     616             ex.printStackTrace();
     617         }
     618         return sb;
     619     }
     620 
     621     /**
     622      * read 读取文本文件
     623      *
     624      * @param file
     625      * @param charset
     626      * @return
     627      */
     628     public static StringBuilder read(File file, String charset) {
     629         StringBuilder sb = new StringBuilder();
     630         try {
     631             sb.append(FileTools.tail(file, false, 0, charset));
     632         } catch (Exception ex) {
     633             ex.printStackTrace();
     634         }
     635         return sb;
     636     }
     637 
     638     /**
     639      * find 读取文本文件指定行
     640      *
     641      * @param filePath
     642      * @param fileName
     643      * @param line
     644      * @param charset
     645      * @return
     646      */
     647     public static StringBuilder find(String filePath, String fileName, int line, String charset) {
     648         StringBuilder sb = new StringBuilder();
     649         try {
     650             String fullPath = combainPath(filePath, fileName);
     651             File file = new File(fullPath);
     652             sb.append(FileTools.tail(file, true, line, charset));
     653         } catch (Exception ex) {
     654             ex.printStackTrace();
     655         }
     656         return sb;
     657     }
     658 
     659     /**
     660      * find 读取文本文件指定行
     661      *
     662      * @param fullPath
     663      * @param line
     664      * @param charset
     665      * @return
     666      */
     667     public static StringBuilder find(String fullPath, int line, String charset) {
     668         StringBuilder sb = new StringBuilder();
     669         try {
     670             File file = new File(fullPath);
     671             sb.append(FileTools.tail(file, true, line, charset));
     672         } catch (Exception ex) {
     673             ex.printStackTrace();
     674         }
     675         return sb;
     676     }
     677 
     678     /**
     679      * find 读取文本文件指定行
     680      *
     681      * @param file
     682      * @param line
     683      * @param charset
     684      * @return
     685      */
     686     public static StringBuilder find(File file, int line, String charset) {
     687         StringBuilder sb = new StringBuilder();
     688         try {
     689             sb.append(FileTools.tail(file, true, line, charset));
     690         } catch (Exception ex) {
     691             ex.printStackTrace();
     692         }
     693         return sb;
     694     }
     695 
     696     /**
     697      * tail 读取文本文件
     698      *
     699      * @param filePath
     700      * @param fileName
     701      * @param charset
     702      * @param find
     703      * @param line
     704      * @return
     705      */
     706     public static StringBuilder tail(String filePath, String fileName, boolean find, int line, String charset) {
     707         StringBuilder sb = new StringBuilder();
     708         try {
     709             String fullPath = combainPath(filePath, fileName);
     710             File file = new File(fullPath);
     711             sb.append(FileTools.tail(file, find, line, charset));
     712         } catch (Exception ex) {
     713             ex.printStackTrace();
     714         }
     715         return sb;
     716     }
     717 
     718     /**
     719      * tail 读取文本文件
     720      *
     721      * @param fullPath
     722      * @param charset
     723      * @param find
     724      * @param line
     725      * @return
     726      */
     727     public static StringBuilder tail(String fullPath, boolean find, int line, String charset) {
     728         StringBuilder sb = new StringBuilder();
     729         try {
     730             File file = new File(fullPath);
     731             sb.append(FileTools.tail(file, find, line, charset));
     732         } catch (Exception ex) {
     733             ex.printStackTrace();
     734         }
     735         return sb;
     736     }
     737 
     738     /**
     739      * tail 读取文本文件
     740      *
     741      * @param file
     742      * @param charset
     743      * @param find
     744      * @param line
     745      * @return
     746      */
     747     public static StringBuilder tail(File file, boolean find, int line, String charset) {
     748         StringBuilder sb = new StringBuilder();
     749         BufferedReader bufferReader = null;
     750         if (null == charset || "".equals(charset)) {
     751             charset = "UTF-8";
     752         }
     753         try {
     754             if (!file.exists() || file.isDirectory()) {
     755                 throw new FileNotFoundException();
     756             }
     757             String fullPath = file.getPath();
     758             bufferReader = new BufferedReader(new InputStreamReader(new FileInputStream(fullPath), charset));
     759             String temp;
     760             for (int i = 0; (temp = bufferReader.readLine()) != null; i++) {
     761                 if (!find || line == i) {
     762                     sb.append(temp);
     763                 }
     764             }
     765         } catch (Exception ex) {
     766             ex.printStackTrace();
     767         } finally {
     768             if (null != bufferReader) {
     769                 try {
     770                     bufferReader.close();
     771                 } catch (IOException ex) {
     772                     ex.printStackTrace();
     773                 }
     774             }
     775         }
     776         return sb;
     777     }
     778 
     779     /**
     780      * sed 读取文本文件
     781      *
     782      * @param filePath
     783      * @param fileName
     784      * @param charset
     785      * @return
     786      */
     787     public static List<String> sed(String filePath, String fileName, String charset) {
     788         List<String> list = new ArrayList();
     789         try {
     790             String fullPath = combainPath(filePath, fileName);
     791             File file = new File(fullPath);
     792             list.addAll(FileTools.sed(file, charset));
     793         } catch (Exception ex) {
     794             ex.printStackTrace();
     795         }
     796         return list;
     797     }
     798 
     799     /**
     800      * sed 读取文本文件
     801      *
     802      * @param fullPath
     803      * @param charset
     804      * @return
     805      */
     806     public static List<String> sed(String fullPath, String charset) {
     807         List<String> list = new ArrayList();
     808         try {
     809             File file = new File(fullPath);
     810             list.addAll(FileTools.sed(file, charset));
     811         } catch (Exception ex) {
     812             ex.printStackTrace();
     813         }
     814         return list;
     815     }
     816 
     817     /**
     818      * sed 读取文本文件
     819      *
     820      * @param file
     821      * @param charset
     822      * @return
     823      */
     824     public static List<String> sed(File file, String charset) {
     825         List<String> list = new ArrayList();
     826         BufferedReader bufferReader = null;
     827         if (null == charset || "".equals(charset)) {
     828             charset = "UTF-8";
     829         }
     830         try {
     831             if (!file.exists() || file.isDirectory()) {
     832                 throw new FileNotFoundException();
     833             }
     834             String fullPath = file.getPath();
     835             bufferReader = new BufferedReader(new InputStreamReader(new FileInputStream(fullPath), charset));
     836             String temp;
     837             for (int i = 0; (temp = bufferReader.readLine()) != null; i++) {
     838                 list.add(temp);
     839             }
     840         } catch (Exception ex) {
     841             ex.printStackTrace();
     842         } finally {
     843             if (null != bufferReader) {
     844                 try {
     845                     bufferReader.close();
     846                 } catch (IOException ex) {
     847                     ex.printStackTrace();
     848                 }
     849             }
     850         }
     851         return list;
     852     }
     853 
     854     /**
     855      * cat 读取文本文件
     856      *
     857      * @param filePath
     858      * @param fileName
     859      * @return
     860      */
     861     public static byte[] cat(String filePath, String fileName) {
     862         byte[] output = {};
     863         try {
     864             String fullPath = combainPath(filePath, fileName);
     865             File file = new File(fullPath);
     866             output = FileTools.cat(file);
     867         } catch (Exception ex) {
     868             ex.printStackTrace();
     869         }
     870         return output;
     871     }
     872 
     873     /**
     874      * cat 读取文本文件
     875      *
     876      * @param fullPath
     877      * @return
     878      */
     879     public static byte[] cat(String fullPath) {
     880         byte[] output = {};
     881         try {
     882             File file = new File(fullPath);
     883             output = FileTools.cat(file);
     884         } catch (Exception ex) {
     885             ex.printStackTrace();
     886         }
     887         return output;
     888     }
     889 
     890     /**
     891      * cat 读取文本文件
     892      *
     893      * @param file
     894      * @return
     895      */
     896     public static byte[] cat(File file) {
     897         InputStream in = null;
     898         byte[] output = {};
     899         try {
     900             if (!file.exists() || file.isDirectory()) {
     901                 throw new FileNotFoundException();
     902             }
     903             String fullPath = file.getPath();
     904             long length = du(file, false);
     905             long _2M = 2097152;
     906             byte[] bytes = new byte[(int) length];
     907             in = new FileInputStream(fullPath);
     908             for (int count = 0; count != -1;) {
     909                 if (length > 16 * _2M) {
     910                     length = 4 * _2M;
     911                 } else if (length > 8 * _2M) {
     912                     length = 2 * _2M;
     913                 } else if (length > 4 * _2M) {
     914                     length = _2M;
     915                 } else if (length > 2 * _2M) {
     916                     length = _2M / 2;
     917                 } else if (length > _2M) {
     918                     length = _2M / 4;
     919                 } else {
     920                     length = 4096;
     921                 }
     922                 bytes = new byte[(int) length];
     923                 count = in.read(bytes);
     924                 output = concatArray(bytes, output);
     925                 length = in.available();
     926             }
     927         } catch (Exception ex) {
     928             ex.printStackTrace();
     929         } finally {
     930             if (null != in) {
     931                 try {
     932                     in.close();
     933                 } catch (Exception ex) {
     934                     ex.printStackTrace();
     935                 }
     936             }
     937         }
     938         return output;
     939     }
     940 
     941     /**
     942      * 合并数组
     943      *
     944      * @param old1
     945      * @param old2
     946      * @return
     947      */
     948     private static byte[] concatArray(byte[] old1, byte[] old2) {
     949         byte[] newArray = new byte[old1.length + old2.length];
     950         System.arraycopy(old1, 0, newArray, 0, old1.length);
     951         System.arraycopy(old2, 0, newArray, old1.length, old2.length);
     952         return newArray;
     953     }
     954 
     955     /**
     956      * dd 写入文件fullPath内容content
     957      *
     958      * @param filePath
     959      * @param fileName
     960      * @param content
     961      * @param isAppend
     962      */
     963     public static void dd(String filePath, String fileName, byte[] content, boolean isAppend) {
     964         try {
     965             String fullPath = combainPath(filePath, fileName);
     966             File file = new File(fullPath);
     967             FileTools.dd(file, content, isAppend);
     968         } catch (Exception ex) {
     969             ex.printStackTrace();
     970         }
     971     }
     972 
     973     /**
     974      * dd 写入文件fullPath内容content
     975      *
     976      * @param fullPath
     977      * @param content
     978      * @param isAppend
     979      */
     980     public static void dd(String fullPath, byte[] content, boolean isAppend) {
     981         try {
     982             File file = new File(fullPath);
     983             FileTools.dd(file, content, isAppend);
     984         } catch (Exception ex) {
     985             ex.printStackTrace();
     986         }
     987     }
     988 
     989     /**
     990      * dd 写入文件fullPath内容content
     991      *
     992      * @param file
     993      * @param content
     994      * @param isAppend
     995      */
     996     public static void dd(File file, byte[] content, boolean isAppend) {
     997         FileOutputStream fileOutputStream = null;
     998         try {
     999             if (!file.exists()) {
    1000                 file.createNewFile();
    1001             }
    1002             fileOutputStream = new FileOutputStream(file, isAppend);
    1003             fileOutputStream.write(content);
    1004         } catch (Exception ex) {
    1005             ex.printStackTrace();
    1006         } finally {
    1007             try {
    1008                 if (null != fileOutputStream) {
    1009                     fileOutputStream.close();
    1010                 }
    1011             } catch (IOException ex) {
    1012                 ex.printStackTrace();
    1013             }
    1014         }
    1015     }
    1016 
    1017     /**
    1018      * write 写文件内容content到文件fullPath
    1019      *
    1020      * @param filePath
    1021      * @param fileName
    1022      * @param content
    1023      */
    1024     public static void write(String filePath, String fileName, String content) {
    1025         try {
    1026             String fullPath = combainPath(filePath, fileName);
    1027             File file = new File(fullPath);
    1028             FileTools.write(file, content, true);
    1029         } catch (Exception ex) {
    1030             ex.printStackTrace();
    1031         }
    1032     }
    1033 
    1034     /**
    1035      * write 写文件内容content到文件fullPath
    1036      *
    1037      * @param fullPath
    1038      * @param content
    1039      */
    1040     public static void write(String fullPath, String content) {
    1041         try {
    1042             File file = new File(fullPath);
    1043             FileTools.write(file, content, true);
    1044         } catch (Exception ex) {
    1045             ex.printStackTrace();
    1046         }
    1047     }
    1048 
    1049     /**
    1050      * write 写文件内容content到文件fullPath
    1051      *
    1052      * @param file
    1053      * @param content
    1054      */
    1055     public static void write(File file, String content) {
    1056         try {
    1057             FileTools.write(file, content, true);
    1058         } catch (Exception ex) {
    1059             ex.printStackTrace();
    1060         }
    1061     }
    1062 
    1063     /**
    1064      * write 写(追加)文件内容content到文件fullPath
    1065      *
    1066      * @param filePath
    1067      * @param fileName
    1068      * @param content
    1069      * @param isAppend
    1070      */
    1071     public static void write(String filePath, String fileName, String content, boolean isAppend) {
    1072         try {
    1073             String fullPath = combainPath(filePath, fileName);
    1074             File file = new File(fullPath);
    1075             FileTools.write(file, content, isAppend);
    1076         } catch (Exception ex) {
    1077             ex.printStackTrace();
    1078         }
    1079     }
    1080 
    1081     /**
    1082      * write 写(追加)文件内容content到文件fullPath
    1083      *
    1084      * @param fullPath
    1085      * @param content
    1086      * @param isAppend
    1087      */
    1088     public static void write(String fullPath, String content, boolean isAppend) {
    1089         try {
    1090             File file = new File(fullPath);
    1091             FileTools.write(file, content, isAppend);
    1092         } catch (Exception ex) {
    1093             ex.printStackTrace();
    1094         }
    1095     }
    1096 
    1097     /**
    1098      * write 写(追加)文件内容content到文件fullPath
    1099      *
    1100      * @param file
    1101      * @param content
    1102      * @param isAppend
    1103      */
    1104     public static void write(File file, String content, boolean isAppend) {
    1105         FileWriter fileWriter = null;
    1106         try {
    1107             if (!file.exists()) {
    1108                 file.createNewFile();
    1109             }
    1110             fileWriter = new FileWriter(file.getPath(), isAppend);
    1111             fileWriter.write(content);
    1112         } catch (Exception ex) {
    1113             ex.printStackTrace();
    1114         } finally {
    1115             if (null != fileWriter) {
    1116                 try {
    1117                     fileWriter.close();
    1118                 } catch (IOException ex) {
    1119                     ex.printStackTrace();
    1120                 }
    1121             }
    1122         }
    1123     }
    1124 
    1125     /**
    1126      * tail 添加文件内容content到文件的index位置
    1127      *
    1128      * @param filePath
    1129      * @param fileName
    1130      * @param content
    1131      * @param index
    1132      */
    1133     public static void tail(String filePath, String fileName, String content, long index) {
    1134         try {
    1135             String fullPath = combainPath(filePath, fileName);
    1136             File file = new File(fullPath);
    1137             FileTools.tail(file, content, index);
    1138         } catch (Exception ex) {
    1139             ex.printStackTrace();
    1140         }
    1141     }
    1142 
    1143     /**
    1144      * tail 添加文件内容content到文件的index位置
    1145      *
    1146      * @param fullPath
    1147      * @param content
    1148      * @param index
    1149      */
    1150     public static void tail(String fullPath, String content, long index) {
    1151         try {
    1152             File file = new File(fullPath);
    1153             FileTools.tail(file, content, index);
    1154         } catch (Exception ex) {
    1155             ex.printStackTrace();
    1156         }
    1157     }
    1158 
    1159     /**
    1160      * tail 添加文件内容content到文件的index位置
    1161      *
    1162      * @param file
    1163      * @param content
    1164      * @param index
    1165      */
    1166     public static void tail(File file, String content, long index) {
    1167         RandomAccessFile randomAccessFile = null;
    1168         try {
    1169             if (!file.exists()) {
    1170                 file.createNewFile();
    1171             }
    1172             randomAccessFile = new RandomAccessFile(file.getPath(), "rw");
    1173             randomAccessFile.seek(index);
    1174             randomAccessFile.writeBytes(content);
    1175         } catch (Exception ex) {
    1176             ex.printStackTrace();
    1177         } finally {
    1178             if (null != randomAccessFile) {
    1179                 try {
    1180                     randomAccessFile.close();
    1181                 } catch (Exception ex) {
    1182                     ex.printStackTrace();
    1183                 }
    1184             }
    1185         }
    1186     }
    1187 
    1188     /**
    1189      * mkdir 创建目录
    1190      *
    1191      * @param filePath
    1192      * @param fileName
    1193      * @return
    1194      */
    1195     public static File mkdir(String filePath, String fileName) {
    1196         File file = null;
    1197         try {
    1198             String fullPath = combainPath(filePath, fileName);
    1199             file = new File(fullPath);
    1200             file = mkdir(file);
    1201         } catch (Exception ex) {
    1202             ex.printStackTrace();
    1203         }
    1204         return file;
    1205     }
    1206 
    1207     /**
    1208      * mkdir 创建目录
    1209      *
    1210      * @param fullPath
    1211      * @return
    1212      */
    1213     public static File mkdir(String fullPath) {
    1214         File file = null;
    1215         try {
    1216             file = new File(fullPath);
    1217             file = mkdir(file);
    1218         } catch (Exception ex) {
    1219             ex.printStackTrace();
    1220         }
    1221         return file;
    1222     }
    1223 
    1224     /**
    1225      * mkdir 创建目录
    1226      *
    1227      * @param file
    1228      * @return
    1229      */
    1230     public static File mkdir(File file) {
    1231         try {
    1232             if (!file.exists()) {
    1233                 file.mkdir();// 如果文件夹不存在则创建
    1234             }
    1235         } catch (Exception ex) {
    1236             ex.printStackTrace();
    1237         }
    1238         return file;
    1239     }
    1240 
    1241     /**
    1242      * touch 创建文件
    1243      *
    1244      * @param filePath
    1245      * @param fileName
    1246      */
    1247     public static void touch(String filePath, String fileName) {
    1248         try {
    1249             String fullPath = combainPath(filePath, fileName);
    1250             File file = new File(fullPath);
    1251             touch(file);
    1252         } catch (Exception ex) {
    1253             ex.printStackTrace();
    1254         }
    1255     }
    1256 
    1257     /**
    1258      * touch 创建文件
    1259      *
    1260      * @param fullPath
    1261      */
    1262     public static void touch(String fullPath) {
    1263         try {
    1264             File file = new File(fullPath);
    1265             touch(file);
    1266         } catch (Exception ex) {
    1267             ex.printStackTrace();
    1268         }
    1269     }
    1270 
    1271     /**
    1272      * touch 创建文件
    1273      *
    1274      * @param file
    1275      */
    1276     public static void touch(File file) {
    1277         try {
    1278             if (!file.exists()) {
    1279                 file.createNewFile();// 如果文件不存在则创建
    1280             }
    1281         } catch (Exception ex) {
    1282             ex.printStackTrace();
    1283         }
    1284     }
    1285 
    1286     /**
    1287      * rm 删除文件
    1288      *
    1289      * @param filePath
    1290      * @param fileName
    1291      */
    1292     public static void rm(String filePath, String fileName) {
    1293         try {
    1294             String fullPath = combainPath(filePath, fileName);
    1295             File file = new File(fullPath);
    1296             rm(file);
    1297         } catch (Exception ex) {
    1298             ex.printStackTrace();
    1299         }
    1300     }
    1301 
    1302     /**
    1303      * rm 删除文件
    1304      *
    1305      * @param fullPath
    1306      */
    1307     public static void rm(String fullPath) {
    1308         try {
    1309             File file = new File(fullPath);
    1310             rm(file);
    1311         } catch (Exception ex) {
    1312             ex.printStackTrace();
    1313         }
    1314     }
    1315 
    1316     /**
    1317      * rm 删除文件
    1318      *
    1319      * @param file
    1320      */
    1321     public static void rm(File file) {
    1322         try {
    1323             if (!file.exists()) {
    1324                 throw new FileNotFoundException();
    1325             }
    1326             if (file.isFile()) {
    1327                 file.delete();
    1328             }
    1329         } catch (Exception ex) {
    1330             ex.printStackTrace();
    1331         }
    1332     }
    1333 
    1334     /**
    1335      * rmdir 删除目录
    1336      *
    1337      * @param filePath
    1338      * @param fileName
    1339      * @param loop
    1340      */
    1341     public static void rmdir(String filePath, String fileName, boolean loop) {
    1342         try {
    1343             String fullPath = combainPath(filePath, fileName);
    1344             File dir = new File(fullPath);
    1345             rmdir(dir, loop);
    1346         } catch (Exception ex) {
    1347             ex.printStackTrace();
    1348         }
    1349     }
    1350 
    1351     /**
    1352      * rmdir 删除目录
    1353      *
    1354      * @param fullPath
    1355      * @param loop
    1356      */
    1357     public static void rmdir(String fullPath, boolean loop) {
    1358         try {
    1359             File dir = new File(fullPath);
    1360             rmdir(dir, loop);
    1361         } catch (Exception ex) {
    1362             ex.printStackTrace();
    1363         }
    1364     }
    1365 
    1366     /**
    1367      * rmdir 删除目录
    1368      *
    1369      * @param dir
    1370      * @param loop
    1371      */
    1372     public static void rmdir(File dir, boolean loop) {
    1373         try {
    1374             if (!dir.exists()) {
    1375                 throw new FileNotFoundException();
    1376             }
    1377             if (dir.isDirectory()) {
    1378                 File[] files = dir.listFiles();
    1379                 int length = files.length;
    1380                 for (int i = 0; i < length && loop; i++) {
    1381                     if (files[i].isDirectory()) {
    1382                         rmdir(files[i], loop);
    1383                     } else {
    1384                         rm(files[i]);
    1385                     }
    1386                 }
    1387                 if (loop || length == 0) {
    1388                     dir.delete();
    1389                 }
    1390             }
    1391         } catch (Exception ex) {
    1392             ex.printStackTrace();
    1393         }
    1394     }
    1395 
    1396     /**
    1397      * du 获取文件实际大小
    1398      *
    1399      * @param filePath
    1400      * @param fileName
    1401      * @param loop
    1402      * @return
    1403      */
    1404     public static long du(String filePath, String fileName, boolean loop) {
    1405         long size = 0;
    1406         try {
    1407             String fullPath = combainPath(filePath, fileName);
    1408             File file = new File(fullPath);
    1409             size = du(file, loop);
    1410         } catch (Exception ex) {
    1411             ex.printStackTrace();
    1412         }
    1413         return size;
    1414     }
    1415 
    1416     /**
    1417      * du 获取文件实际大小
    1418      *
    1419      * @param filePath
    1420      * @param fileName
    1421      * @return
    1422      */
    1423     public static long du(String filePath, String fileName) {
    1424         long size = 0;
    1425         try {
    1426             String fullPath = combainPath(filePath, fileName);
    1427             File file = new File(fullPath);
    1428             size = du(file, false);
    1429         } catch (Exception ex) {
    1430             ex.printStackTrace();
    1431         }
    1432         return size;
    1433     }
    1434 
    1435     /**
    1436      * du 获取文件实际大小
    1437      *
    1438      * @param fullPath
    1439      * @return
    1440      */
    1441     public static long du(String fullPath) {
    1442         long size = 0;
    1443         try {
    1444             File file = new File(fullPath);
    1445             size = du(file, false);
    1446         } catch (Exception ex) {
    1447             ex.printStackTrace();
    1448         }
    1449         return size;
    1450     }
    1451 
    1452     /**
    1453      * du 获取文件实际大小
    1454      *
    1455      * @param file
    1456      * @return
    1457      */
    1458     public static long du(File file) {
    1459         long size = 0;
    1460         try {
    1461             size = du(file, false);
    1462         } catch (Exception ex) {
    1463             ex.printStackTrace();
    1464         }
    1465         return size;
    1466     }
    1467 
    1468     /**
    1469      * du 获取文件实际大小
    1470      *
    1471      * @param fullPath
    1472      * @param loop
    1473      * @return
    1474      */
    1475     public static long du(String fullPath, boolean loop) {
    1476         long size = 0;
    1477         try {
    1478             File file = new File(fullPath);
    1479             size = du(file, loop);
    1480         } catch (Exception ex) {
    1481             ex.printStackTrace();
    1482         }
    1483         return size;
    1484     }
    1485 
    1486     /**
    1487      * du 获取文件实际大小
    1488      *
    1489      * @param file
    1490      * @param loop
    1491      * @return
    1492      */
    1493     public static long du(File file, boolean loop) {
    1494         FileChannel fileChannel = null;
    1495         long size = 0;
    1496         try {
    1497             if (!file.exists()) {
    1498                 throw new FileNotFoundException();
    1499             }
    1500             if (file.isFile()) {
    1501                 FileInputStream fis = new FileInputStream(file);
    1502                 fileChannel = fis.getChannel();
    1503                 size = fileChannel.size();
    1504             } else if (file.isDirectory()) {
    1505                 File[] files = file.listFiles();
    1506                 int length = files.length;
    1507                 for (int i = 0; i < length && loop; i++) {
    1508                     if (files[i].isDirectory()) {
    1509                         du(files[i], loop);
    1510                     } else {
    1511                         size += du(files[i], false);
    1512                     }
    1513                 }
    1514             }
    1515         } catch (Exception ex) {
    1516             ex.printStackTrace();
    1517         } finally {
    1518             if (null != fileChannel) {
    1519                 try {
    1520                     fileChannel.close();
    1521                 } catch (Exception ex) {
    1522                     ex.printStackTrace();
    1523                 }
    1524             }
    1525         }
    1526         return size;
    1527     }
    1528 
    1529     /**
    1530      * 根据传入的文件夹目录返回目录下文件信息
    1531      * 
    1532      * @param path
    1533      * @return fileCount:文件夹下压缩文件的个数,前台显示; files:压缩文件的list;
    1534      *         fileNames:压缩文件夹的文件名,前台显示;
    1535      *         fileInfoJson:包含fileCount、fileNames的json信息。
    1536      */
    1537     public static Map<String, Object> checkFolder(String path) {
    1538         Map<String, Object> folderInfo = new HashMap<>();
    1539         try {
    1540             File file = new File(path);
    1541             int fileCount = 0;
    1542             List<File> files = new ArrayList<File>();
    1543             List<String> fileNames = new ArrayList<>();
    1544             if (!file.isDirectory()) {
    1545                 return null;
    1546             } else {
    1547                 String[] fileList = file.list();
    1548                 for (int i = 0; i < fileList.length; i++) {
    1549                     if (fileList[i].lastIndexOf(".zip") > 0 || fileList[i].lastIndexOf(".rar") > 0) {
    1550                         fileCount++;
    1551                         File eleFile = new File(path + File.separator + fileList[i]);
    1552                         files.add(eleFile);
    1553                         fileNames.add(fileList[i]);
    1554                     }
    1555                 }
    1556             }
    1557             folderInfo.put("fileCount", fileCount);
    1558             folderInfo.put("fileNames", fileNames);
    1559             JSONObject jsonObject = JSONObject.fromObject(folderInfo);
    1560             folderInfo.put("fileInfoJson", jsonObject.toString());
    1561             folderInfo.put("files", files);
    1562 
    1563         } catch (Exception e) {
    1564             // TODO: handle exception
    1565         }
    1566 
    1567         return folderInfo;
    1568     }
    1569 
    1570     /**
    1571      * 文件上传
    1572      * 
    1573      * @param multipartRequest
    1574      * @return
    1575      */
    1576     public static String uploadifyFiles(MultipartHttpServletRequest multipartRequest, String targetPath) {
    1577         String responseStr = "";
    1578         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
    1579         String configPath = File.separator;
    1580         SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
    1581         String year = sdf.format(new Date());
    1582         configPath += year + File.separator;
    1583         sdf = new SimpleDateFormat("MM");
    1584         String month = sdf.format(new Date());
    1585         configPath += month + File.separator;
    1586         ContentID contentID = new ContentID(2L);
    1587         long cid = contentID.nextId();
    1588         configPath += cid + File.separator;
    1589         targetPath += configPath;
    1590         // 创建文件夹
    1591         File file = new File(targetPath);
    1592         if (!file.exists()) {
    1593             file.mkdirs();
    1594         }
    1595         // 预留多文件上传,但流程需要另外改动
    1596         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
    1597             // 上传文件名
    1598             MultipartFile mf = entity.getValue();
    1599             String fileName = mf.getOriginalFilename();
    1600             // String fileExt = fileName.substring(fileName.lastIndexOf(".") +
    1601             // 1).toLowerCase();
    1602             // SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
    1603             // String newFileName = df.format(new Date()) + "_" + new
    1604             // Random().nextInt(1000) + "." + fileExt;
    1605             responseStr = targetPath + fileName;
    1606             File uploadFile = new File(targetPath + fileName);
    1607             try {
    1608                 mf.transferTo(uploadFile);
    1609                 // FileCopyUtils.copy(mf.getBytes(), uploadFile);
    1610             } catch (IOException e) {
    1611                 responseStr = "error";
    1612                 e.printStackTrace();
    1613             }
    1614         }
    1615         return responseStr;
    1616     }
    1617 
    1618     /**
    1619      * 上传xsd文件,用户基础库建立时使用
    1620      * 
    1621      * @param multipartRequest
    1622      * @param targetPath
    1623      * @return
    1624      */
    1625     public static String uploadifyXsd(MultipartHttpServletRequest multipartRequest, String targetPath) {
    1626         String responseStr = "";
    1627         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
    1628         String configPath = File.separator;
    1629         SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
    1630         String docName = df.format(new Date()) + "_" + new Random().nextInt(1000);
    1631         configPath += docName + File.separator;
    1632         targetPath += configPath;
    1633         // 创建文件夹
    1634         File file = new File(targetPath);
    1635         if (!file.exists()) {
    1636             file.mkdirs();
    1637         }
    1638         // 预留多文件上传,但流程需要另外改动
    1639         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
    1640             // 上传文件名
    1641             MultipartFile mf = entity.getValue();
    1642             String fileName = mf.getOriginalFilename();
    1643             responseStr = targetPath + fileName;
    1644             File uploadFile = new File(targetPath + fileName);
    1645             try {
    1646                 mf.transferTo(uploadFile);
    1647                 // FileCopyUtils.copy(mf.getBytes(), uploadFile);
    1648             } catch (IOException e) {
    1649                 responseStr = "error";
    1650                 e.printStackTrace();
    1651             }
    1652         }
    1653         return responseStr;
    1654     }
    1655 
    1656     /**
    1657      * 上传企业资质
    1658      * 
    1659      * @param multipartRequest
    1660      * @param targetPath
    1661      * @return
    1662      */
    1663     public static String uploadifyCA(MultipartHttpServletRequest multipartRequest, String targetPath) {
    1664         String responseStr = "";
    1665         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
    1666         String configPath = File.separator;
    1667         ContentID contentID = new ContentID(2L);
    1668         long contentId = contentID.nextId();
    1669         configPath += contentId + File.separator;
    1670         targetPath += configPath;
    1671         // 创建文件夹
    1672         File file = new File(targetPath);
    1673         if (!file.exists()) {
    1674             file.mkdirs();
    1675         }
    1676         // 预留多文件上传,但流程需要另外改动
    1677         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
    1678             // 上传文件名
    1679             MultipartFile mf = entity.getValue();
    1680             String fileName = mf.getOriginalFilename();
    1681             responseStr = targetPath + fileName;
    1682             File uploadFile = new File(targetPath + fileName);
    1683             try {
    1684                 mf.transferTo(uploadFile);
    1685                 // FileCopyUtils.copy(mf.getBytes(), uploadFile);
    1686             } catch (IOException e) {
    1687                 responseStr = "error";
    1688                 e.printStackTrace();
    1689             }
    1690         }
    1691         return responseStr;
    1692     }
    1693 
    1694     public static void uploadSimpleFile(CommonsMultipartFile file, String targetPath) {
    1695         File targetFile = new File(targetPath).getParentFile();
    1696         if (!targetFile.exists())
    1697             targetFile.mkdirs();
    1698         if (!file.isEmpty()) {
    1699             try {
    1700                 FileOutputStream fos = new FileOutputStream(targetPath);
    1701                 InputStream in = file.getInputStream();
    1702                 int b = 0;
    1703                 while ((b = in.read()) != -1) {
    1704                     fos.write(b);
    1705                 }
    1706                 fos.close();
    1707                 in.close();
    1708             } catch (Exception e) {
    1709                 e.printStackTrace();
    1710             }
    1711         }
    1712     }
    1713 
    1714     public static void inputstreamtofile(InputStream ins, File file) {
    1715         OutputStream os;
    1716         try {
    1717             os = new FileOutputStream(file);
    1718             int bytesRead = 0;
    1719             byte[] buffer = new byte[8192];
    1720             while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
    1721                 os.write(buffer, 0, bytesRead);
    1722             }
    1723             os.close();
    1724             ins.close();
    1725 
    1726         } catch (FileNotFoundException e) {
    1727             // TODO Auto-generated catch block
    1728             e.printStackTrace();
    1729         } catch (IOException e) {
    1730             // TODO Auto-generated catch block
    1731             e.printStackTrace();
    1732         }
    1733     }
    1734 
    1735     /**
    1736      * 删除过期的文件
    1737      * 
    1738      * @param file
    1739      * @param save_days
    1740      */
    1741     public static void deleteOutOfDaysFiles(File file, int save_days) {
    1742         if (file.exists()) {
    1743             if (file.isDirectory()) {
    1744                 // 2016 , 年
    1745                 File[] files = file.listFiles();
    1746                 if (files != null && files.length > 0) {
    1747                     for (int i = 0; i < files.length; i++) {
    1748                         try {
    1749                             int days = DateUtil.daysBetween(new Date(file.lastModified()), new Date());
    1750                             if (days > save_days) {
    1751                                 if (files[i].isDirectory()) {
    1752                                     FileTools.rmdir(files[i], true);
    1753                                 } else {
    1754                                     FileTools.rm(file);
    1755                                 }
    1756                             } else {
    1757                                 // 11,月
    1758                                 deleteOutOfDaysFiles(files[i], save_days);
    1759                             }
    1760                         } catch (ParseException e) {
    1761                             // TODO Auto-generated catch block
    1762                             e.printStackTrace();
    1763                         }
    1764                     }
    1765                 }
    1766             } else {
    1767                 int days;
    1768                 try {
    1769                     days = DateUtil.daysBetween(new Date(file.lastModified()), new Date());
    1770                     if (days > save_days) {
    1771                         FileTools.rm(file);
    1772                     }
    1773                 } catch (ParseException e) {
    1774                     // TODO Auto-generated catch block
    1775                     e.printStackTrace();
    1776                 }
    1777 
    1778             }
    1779 
    1780         }
    1781     }
    1782 
    1783     public static List<File> getFileList(String strPath) {
    1784 
    1785         File dir = new File(strPath);
    1786 
    1787         File[] files = dir.listFiles();
    1788         // 该文件目录下文件全部放入数组
    1789         List<File> filelist = new ArrayList<>();
    1790 
    1791         if (files != null) {
    1792             for (int i = 0; i < files.length; i++) {
    1793                 String fileName = files[i].getName();
    1794                 if (files[i].isDirectory()) { // 判断是文件还是文件夹
    1795                     getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径
    1796                 } else if (fileName.endsWith("avi")) { // 判断文件名是否以.avi结尾
    1797 
    1798                     filelist.add(files[i]);
    1799                 } else {
    1800                     continue;
    1801                 }
    1802             }
    1803 
    1804         }
    1805         return filelist;
    1806     }
    1807 
    1808     public static String shareFile(String sourcePath, String tarPath, String cid) {
    1809 
    1810         String toURL = tarPath;
    1811 
    1812         SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
    1813         String year = sdf.format(new Date());
    1814         toURL +=File.separator+ year + File.separator;
    1815         sdf = new SimpleDateFormat("MM");
    1816         String month = sdf.format(new Date());
    1817         toURL += month + File.separator;
    1818         String toRealUrl = toURL;
    1819         File souceFile = new File(sourcePath);
    1820         String str = "";
    1821         if (souceFile.exists() && souceFile.isDirectory()) {
    1822 
    1823             str = sourcePath.substring(sourcePath.lastIndexOf(File.separator));
    1824             toRealUrl = toRealUrl + File.separator + cid + File.separator;
    1825 
    1826         } else {
    1827 
    1828             String parentPath = souceFile.getParent();
    1829             str = parentPath.substring(parentPath.lastIndexOf(File.separator));
    1830             toRealUrl = toRealUrl + File.separator + cid + File.separator + str;
    1831 
    1832         }
    1833 
    1834         // 创建文件夹
    1835         File file = new File(toRealUrl);
    1836 
    1837         if (!file.exists()) {
    1838 
    1839             file.mkdirs();
    1840         }
    1841 
    1842         String newUrl = "";
    1843 
    1844         if (souceFile.exists() && souceFile.isDirectory()) {
    1845 
    1846             cutGeneralFile(sourcePath, file.getAbsolutePath());
    1847             newUrl = file.getAbsolutePath() + File.separator + str;
    1848 
    1849         } else {
    1850             
    1851             if(souceFile.getName().toLowerCase().endsWith(".xml")){
    1852                 
    1853                 sourcePath=souceFile.getParent();
    1854                 cutGeneralFile(sourcePath, file.getParent());
    1855             }else{
    1856             copyFile(sourcePath, file.getAbsolutePath());            
    1857             }
    1858             newUrl = file.getAbsolutePath() + File.separator + souceFile.getName();
    1859         }
    1860 
    1861         return newUrl;
    1862 
    1863     }
    1864 
    1865     public static boolean shareFile2(String sourcePath, String tarPath) {
    1866 
    1867         String toURL = tarPath;
    1868 
    1869         File souceFile = new File(sourcePath);
    1870 
    1871         if (!new File(toURL).exists())
    1872 
    1873             new File(toURL).mkdirs();
    1874 
    1875         if (souceFile.exists() && souceFile.isDirectory()) {
    1876 
    1877             return cutGeneralFile(sourcePath, toURL);
    1878 
    1879         } else {
    1880 
    1881             File parentFile = souceFile.getParentFile();
    1882             toURL = toURL + File.separator;
    1883             copyFile(sourcePath, toURL);
    1884             return true;
    1885 
    1886         }
    1887 
    1888     }
    1889 
    1890     /**
    1891      * 获取不带扩展名的文件名
    1892      * 
    1893      * @param filename
    1894      * @return
    1895      */
    1896     public static String getFileNameNoEx(String filename) {
    1897 
    1898         if ((filename != null) && (filename.length() > 0)) {
    1899             int dot = filename.lastIndexOf('.');
    1900             if ((dot > -1) && (dot < (filename.length()))) {
    1901                 return filename.substring(0, dot);
    1902             }
    1903         }
    1904         return filename;
    1905     }
    1906 
    1907     // 获取文件的上上级目录
    1908     public static String hPPPath(String file) {
    1909 
    1910         File fil = new File(file);
    1911         String str = fil.getParent();
    1912 
    1913         File pfile = new File(str);
    1914         String str2 = pfile.getParent();
    1915         return str2;
    1916     }
    1917 
    1918     // 获取文件的上级目录
    1919     public static String hPPath(String file) {
    1920 
    1921         File fil = new File(file);
    1922 
    1923         return fil.getParent();
    1924     }
    1925 
    1926     /**
    1927      * 
    1928      * @param file
    1929      * @return
    1930      */
    1931     public static List<File> sortFileType(List<File> subList) {
    1932 
    1933         List<File> txtFile = new ArrayList<File>();
    1934         List<File> docFile = new ArrayList<File>();
    1935         List<File> pdfFile = new ArrayList<File>();
    1936         List<File> xmlFile = new ArrayList<File>();
    1937         List<File> htmlFile = new ArrayList<File>();
    1938 
    1939         List<File> filesAll = new ArrayList<File>();
    1940 
    1941         for (int i = 0; i < subList.size(); i++) {
    1942 
    1943             File file = subList.get(i);
    1944 
    1945             if (file.getAbsolutePath().contains(".txt")) {
    1946 
    1947                 txtFile.add(file);
    1948 
    1949             } else if (file.getAbsolutePath().contains(".doc") || file.getAbsolutePath().contains(".docx")) {
    1950 
    1951                 docFile.add(file);
    1952 
    1953             } else if (file.getAbsolutePath().contains(".pdf")) {
    1954 
    1955                 pdfFile.add(file);
    1956 
    1957             } else if (file.getName().contains(".xml")) {
    1958 
    1959                 xmlFile.add(file);
    1960 
    1961             } else if (file.getName().contains(".html")) {
    1962 
    1963                 htmlFile.add(file);
    1964 
    1965             }
    1966 
    1967         }
    1968 
    1969         if (txtFile.size() > 0) {
    1970             filesAll.addAll(txtFile);
    1971         }
    1972         if (docFile.size() > 0) {
    1973             filesAll.addAll(docFile);
    1974         }
    1975         if (pdfFile.size() > 0) {
    1976             filesAll.addAll(pdfFile);
    1977         }
    1978         if (xmlFile.size() > 0) {
    1979             filesAll.addAll(xmlFile);
    1980         }
    1981         if (htmlFile.size() > 0) {
    1982             filesAll.addAll(htmlFile);
    1983         }
    1984 
    1985         return filesAll;
    1986     }
    1987 
    1988     /**
    1989      * 复制文件或文件夹
    1990      * 
    1991      * @param srcPath
    1992      * @param destDir
    1993      *            目标文件所在的目录
    1994      * @return
    1995      */
    1996     public static boolean copyGeneralFile(String srcPath, String destDir) {
    1997 
    1998         boolean flag = false;
    1999         File file = new File(srcPath);
    2000 
    2001         if (!file.exists()) {
    2002             return false;
    2003         }
    2004 
    2005         if (file.isFile()) { // 源文件
    2006             flag = copyFile(srcPath, destDir);
    2007         } else if (file.isDirectory()) {
    2008             flag = copyDirectory(srcPath, destDir);
    2009         }
    2010 
    2011         return flag;
    2012     }
    2013 
    2014     /**
    2015      * 复制文件
    2016      * 
    2017      * @param srcPath
    2018      *            源文件绝对路径
    2019      * @param destDir
    2020      *            目标文件所在目录
    2021      * @return boolean
    2022      */
    2023     private static boolean copyFile(String srcPath, String destDir) {
    2024         boolean flag = false;
    2025 
    2026         File srcFile = new File(srcPath);
    2027 
    2028         if (!srcFile.exists()) { // 源文件不存在
    2029             return false;
    2030         }
    2031         // 获取待复制文件的文件名
    2032         String fileName = srcPath.substring(srcPath.lastIndexOf(File.separator));
    2033         String destPath = destDir + fileName;
    2034         if (destPath.equals(srcPath)) { // 源文件路径和目标文件路径重复
    2035             return false;
    2036         }
    2037 
    2038         File destFile = new File(destPath);
    2039 
    2040         if (destFile.exists() && destFile.isFile()) { // 该路径下已经有一个同名文件
    2041 
    2042             //// 获取导入文件的文件名
    2043             String srcStr = destPath.substring(0, destPath.indexOf("."));
    2044 
    2045             int i = 0;
    2046 
    2047             String destFileParent = destFile.getParent();
    2048 
    2049             // 获取目标的的所有文件
    2050 
    2051             List<File> files = getFiles(destFileParent, true);
    2052 
    2053             for (File file : files) {
    2054 
    2055                 // 获取每个文件的文件名
    2056                 String destStr = file.getAbsolutePath().substring(0, file.getAbsolutePath().indexOf("."));
    2057 
    2058                 if (destStr.contains(srcStr)) {
    2059 
    2060                     i++;
    2061                 }
    2062             }
    2063 
    2064             // 获取要导入路径下的所有包含该文件名称的内容
    2065             String str = srcPath.substring(srcPath.lastIndexOf(File.separator));
    2066 
    2067             StringBuilder fn = new StringBuilder(str);
    2068 
    2069             if (fileName.indexOf(".") > 0) {
    2070 
    2071                 fn.insert(fn.lastIndexOf("."), "_副本(" + i + ")");
    2072 
    2073             } else {
    2074 
    2075                 fn.append("_副本(" + i + ")");
    2076             }
    2077 
    2078             destFile = new File(destDir + fn.toString());
    2079 
    2080             if (!destFile.exists()) {
    2081 
    2082                 try {
    2083                     destFile.createNewFile();
    2084                 } catch (IOException e) {
    2085                     // TODO Auto-generated catch block
    2086                     e.printStackTrace();
    2087                 }
    2088             }
    2089 
    2090         }
    2091 
    2092         File destFileDir = new File(destDir);
    2093 
    2094         destFileDir.mkdirs();
    2095 
    2096         try {
    2097             FileInputStream fis = new FileInputStream(srcPath);
    2098             FileOutputStream fos = new FileOutputStream(destFile);
    2099             byte[] buf = new byte[1024];
    2100             int c;
    2101             while ((c = fis.read(buf)) != -1) {
    2102                 fos.write(buf, 0, c);
    2103             }
    2104 
    2105             fis.close();
    2106             fos.close();
    2107 
    2108             flag = true;
    2109         } catch (IOException e) {
    2110             //
    2111         }
    2112 
    2113         if (flag) {
    2114         }
    2115 
    2116         return flag;
    2117     }
    2118 
    2119     /**
    2120      * 
    2121      * @param srcPath
    2122      *            源文件夹路径
    2123      * @param destPath
    2124      *            目标文件夹所在目录
    2125      * @return
    2126      */
    2127     private static boolean copyDirectory(String srcPath, String destDir) {
    2128         boolean flag = false;
    2129 
    2130         File srcFile = new File(srcPath);
    2131         if (!srcFile.exists()) { // 源文件夹不存在
    2132             return false;
    2133         }
    2134         // 获得待复制的文件夹的名字,比如待复制的文件夹为"E:\dir"则获取的名字为"dir"
    2135         String dirName = new File(srcPath).getName();
    2136         // String dirName = getDirName(srcPath);
    2137         // 目标文件夹的完整路径
    2138         String destPath = destDir + File.separator + dirName;
    2139         // System.out.println("目标文件夹的完整路径为:" + destPath);
    2140 
    2141         if (destPath.equals(srcPath)) {
    2142             return false;
    2143         }
    2144         File destDirFile = new File(destPath);
    2145 
    2146         if (!destDirFile.exists()) {
    2147 
    2148             destDirFile.mkdirs(); // 生成目录
    2149 
    2150         }
    2151 
    2152         File[] fileList = srcFile.listFiles(); // 获取源文件夹下的子文件和子文件夹
    2153         if (fileList.length == 0) { // 如果源文件夹为空目录则直接设置flag为true,这一步非常隐蔽,debug了很久
    2154             flag = true;
    2155         } else {
    2156             for (File temp : fileList) {
    2157                 if (temp.isFile()) { // 文件
    2158                     flag = copyFile(temp.getAbsolutePath(), destPath);
    2159                 } else if (temp.isDirectory()) { // 文件夹
    2160                     flag = copyDirectory(temp.getAbsolutePath(), destPath);
    2161                 }
    2162                 if (!flag) {
    2163                     break;
    2164                 }
    2165             }
    2166         }
    2167 
    2168         if (flag) {
    2169         }
    2170 
    2171         return flag;
    2172     }
    2173 
    2174     /**
    2175      * 获取待复制文件夹的文件夹名
    2176      * 
    2177      * @param dir
    2178      * @return String
    2179      */
    2180     private static String getDirName(String dir) {
    2181         if (dir.endsWith(File.separator)) { // 如果文件夹路径以"\"结尾,则先去除末尾的"\"
    2182             dir = dir.substring(0, dir.lastIndexOf(File.separator));
    2183         }
    2184         return dir.substring(dir.lastIndexOf(File.separator) + 1);
    2185     }
    2186 
    2187     /**
    2188      * 删除文件或文件夹
    2189      * 
    2190      * @param path
    2191      *            待删除的文件的绝对路径
    2192      * @return boolean
    2193      */
    2194     public static boolean deleteGeneralFile(String path) {
    2195         boolean flag = false;
    2196 
    2197         File file = new File(path);
    2198 
    2199         if (!file.exists()) {
    2200         }
    2201 
    2202         if (file.isDirectory()) { // 如果是目录,则单独处理
    2203             flag = deleteDirectory(file.getAbsolutePath());
    2204         } else if (file.isFile()) {
    2205             flag = deleteFile(file);
    2206         }
    2207 
    2208         if (flag) {
    2209         }
    2210 
    2211         return flag;
    2212     }
    2213 
    2214     /**
    2215      * 删除文件
    2216      * 
    2217      * @param file
    2218      * @return boolean
    2219      */
    2220     private static boolean deleteFile(File file) {
    2221 
    2222         return file.delete();
    2223 
    2224     }
    2225 
    2226     /**
    2227      * 删除目录及其下面的所有子文件和子文件夹,注意一个目录下如果还有其他文件或文件夹
    2228      * 则直接调用delete方法是不行的,必须待其子文件和子文件夹完全删除了才能够调用delete
    2229      * 
    2230      * @param path
    2231      *            path为该目录的路径
    2232      */
    2233     private static boolean deleteDirectory(String path) {
    2234         boolean flag = true;
    2235         File dirFile = new File(path);
    2236         if (!dirFile.isDirectory()) {
    2237             return flag;
    2238         }
    2239         File[] files = dirFile.listFiles();
    2240         for (File file : files) { // 删除该文件夹下的文件和文件夹
    2241             // Delete file.
    2242             if (file.isFile()) {
    2243                 flag = deleteFile(file);
    2244             } else if (file.isDirectory()) {// Delete folder
    2245                 flag = deleteDirectory(file.getAbsolutePath());
    2246             }
    2247             if (!flag) { // 只要有一个失败就立刻不再继续
    2248                 break;
    2249             }
    2250         }
    2251         flag = dirFile.delete(); // 删除空目录
    2252         return flag;
    2253     }
    2254 
    2255     /**
    2256      * 由上面方法延伸出剪切方法:复制+删除
    2257      * 
    2258      * @param destDir
    2259      *            同上
    2260      */
    2261     public static boolean cutGeneralFile(String srcPath, String destDir) {
    2262 
    2263         if (!copyGeneralFile(srcPath, destDir)) {
    2264             return false;
    2265         }
    2266 
    2267         if (!deleteGeneralFile(srcPath)) {
    2268             return false;
    2269         }
    2270 
    2271         return true;
    2272     }
    2273 
    2274     public static String[] getFileNameFromUrl(String url) {
    2275         if (url != null && !url.equals("") && !url.equals("null")) {
    2276             File file = new File(url);
    2277             if (file.exists()) {
    2278                 if (file.isDirectory()) {
    2279                     return file.list();
    2280                 } else if (file.isFile()) {
    2281                     return new String[] { file.getName() };
    2282                 }
    2283             }
    2284         }
    2285         return null;
    2286     }
    2287 
    2288     public static void deleteFileOrDirectory(String filePath) {
    2289 
    2290         File file = new File(filePath);
    2291 
    2292         if (file.exists()) {
    2293             if (file.isDirectory()) {
    2294 
    2295                 rmdir(file, true);
    2296 
    2297             } else if (file.isFile()) {
    2298 
    2299                 if (filePath.equals(".xml") || filePath.equals(".html") || filePath.equals("htm")) {
    2300 
    2301                     rmdir(file.getParent(), true);
    2302 
    2303                 } else {
    2304                     rm(file);
    2305 
    2306                 }
    2307             }
    2308         }
    2309     }
    2310 
    2311     public static String getEnclosure(String filePath) {
    2312 
    2313         File sourceFile = new File(filePath);
    2314 
    2315         String tarPath = null;
    2316         if (sourceFile.exists()) {
    2317 
    2318             if (sourceFile.isFile()) {
    2319 
    2320                 tarPath = getEnclosure(sourceFile.getParent());
    2321 
    2322             } else if (sourceFile.isDirectory()) {
    2323 
    2324                 tarPath = sourceFile.getParent();
    2325 
    2326             }
    2327 
    2328         }
    2329         return tarPath;
    2330 
    2331     }
    2332 
    2333     public static int getFileCount(String filePath) {
    2334 
    2335         int count=0;
    2336         File file = new File(filePath);
    2337         File parentFile = null;
    2338         if (file.isDirectory()) {
    2339             parentFile = file;
    2340         } else if (file.isFile()) {
    2341             parentFile = file.getParentFile();
    2342 
    2343         }
    2344 
    2345         if (parentFile != null) {
    2346 
    2347             List<File> files=getFiles(parentFile, true);
    2348 
    2349             count=files.size();
    2350         }
    2351 
    2352         return count;
    2353     }
    2354 
    2355     // 获取文件夹的大小
    2356     public static Long fileSize(String filePath) {
    2357 
    2358         long fileSize = 0l;
    2359         File file = new File(filePath);
    2360         File parentFile = null;
    2361         if (file.isDirectory()) {
    2362             parentFile = file;
    2363         } else if (file.isFile()) {
    2364             parentFile = file.getParentFile();
    2365 
    2366         }
    2367 
    2368         if (parentFile != null) {
    2369 
    2370             List<File> files=getFiles(parentFile, true);
    2371 
    2372             for (File f : files) {
    2373 
    2374                 if (f.exists() && f.isFile()) {
    2375 
    2376                     fileSize += f.length();
    2377                 }
    2378             }
    2379         }
    2380 
    2381         return fileSize;
    2382 
    2383     }
    2384 
    2385     // 文件大小转化为 tb/mb/gb/tb
    2386     public static String fileSizeToMB(long fileS) {
    2387         String size = "";
    2388         DecimalFormat df = new DecimalFormat("#.00");
    2389         if (fileS < 1024) {
    2390             size = df.format((double) fileS) + "BT";
    2391         } else if (fileS < 1048576) {
    2392             size = df.format((double) fileS / 1024) + "KB";
    2393         } else if (fileS < 1073741824) {
    2394             size = df.format((double) fileS / 1048576) + "MB";
    2395         } else {
    2396             size = df.format((double) fileS / 1073741824) + "GB";
    2397         }
    2398         return size;
    2399 
    2400     }
    2401 
    2402     public static void main(String[] args) {
    2403 
    2404     }
    2405 
    2406 }
  • 相关阅读:
    bzoj2064分裂(dp)
    关于逆元的学习笔记(尚未完成)
    线性基学习笔记
    bzoj2460元素(线性基,贪心)
    CF280C Game on tree(期望dp)
    XJOI contest800
    关闭极域电子教室学生端的各种方法
    大坑!有网,电脑qq登不上去!!
    4.25 ZJOI2017 10AM
    bzoj1621
  • 原文地址:https://www.cnblogs.com/git-niu/p/7337529.html
Copyright © 2011-2022 走看看