zoukankan      html  css  js  c++  java
  • FileToolkit 文件工具箱

      1 import org.apache.commons.io.FileUtils; 
      2 import org.apache.commons.io.filefilter.*; 
      3 import org.apache.commons.logging.Log; 
      4 import org.apache.commons.logging.LogFactory;
      5 
      6 import java.io.*;
      7 
      8 /** 
      9 * 文件工具箱 
     10 * 
     11 * @author leizhimin 2008-12-15 13:59:16 
     12 */ 
     13 public final class FileToolkit { 
     14         private static final Log log = LogFactory.getLog(FileToolkit.class);
     15 
     16         /** 
     17          * 复制文件或者目录,复制前后文件完全一样。 
     18          * 
     19          * @param resFilePath 源文件路径 
     20          * @param distFolder    目标文件夹 
     21          * @IOException 当操作发生异常时抛出 
     22          */ 
     23         public static void copyFile(String resFilePath, String distFolder) throws IOException { 
     24                 File resFile = new File(resFilePath); 
     25                 File distFile = new File(distFolder); 
     26                 if (resFile.isDirectory()) { 
     27                         FileUtils.copyDirectoryToDirectory(resFile, distFile); 
     28                 } else if (resFile.isFile()) { 
     29                         FileUtils.copyFileToDirectory(resFile, distFile, true); 
     30                 } 
     31         }
     32 
     33         /** 
     34          * 删除一个文件或者目录 
     35          * 
     36          * @param targetPath 文件或者目录路径 
     37          * @IOException 当操作发生异常时抛出 
     38          */ 
     39         public static void deleteFile(String targetPath) throws IOException { 
     40                 File targetFile = new File(targetPath); 
     41                 if (targetFile.isDirectory()) { 
     42                         FileUtils.deleteDirectory(targetFile); 
     43                 } else if (targetFile.isFile()) { 
     44                         targetFile.delete(); 
     45                 } 
     46         }
     47 
     48         /** 
     49          * 移动文件或者目录,移动前后文件完全一样,如果目标文件夹不存在则创建。 
     50          * 
     51          * @param resFilePath 源文件路径 
     52          * @param distFolder    目标文件夹 
     53          * @IOException 当操作发生异常时抛出 
     54          */ 
     55         public static void moveFile(String resFilePath, String distFolder) throws IOException { 
     56                 File resFile = new File(resFilePath); 
     57                 File distFile = new File(distFolder); 
     58                 if (resFile.isDirectory()) { 
     59                         FileUtils.moveDirectoryToDirectory(resFile, distFile, true); 
     60                 } else if (resFile.isFile()) { 
     61                         FileUtils.moveFileToDirectory(resFile, distFile, true); 
     62                 } 
     63         }
     64 
     65 
     66         /** 
     67          * 重命名文件或文件夹 
     68          * 
     69          * @param resFilePath 源文件路径 
     70          * @param newFileName 重命名 
     71          * @return 操作成功标识 
     72          */ 
     73         public static boolean renameFile(String resFilePath, String newFileName) { 
     74                 String newFilePath = StringToolkit.formatPath(StringToolkit.getParentPath(resFilePath) + "/" + newFileName); 
     75                 File resFile = new File(resFilePath); 
     76                 File newFile = new File(newFilePath); 
     77                 return resFile.renameTo(newFile); 
     78         }
     79 
     80         /** 
     81          * 读取文件或者目录的大小 
     82          * 
     83          * @param distFilePath 目标文件或者文件夹 
     84          * @return 文件或者目录的大小,如果获取失败,则返回-1 
     85          */ 
     86         public static long genFileSize(String distFilePath) { 
     87                 File distFile = new File(distFilePath); 
     88                 if (distFile.isFile()) { 
     89                         return distFile.length(); 
     90                 } else if (distFile.isDirectory()) { 
     91                         return FileUtils.sizeOfDirectory(distFile); 
     92                 } 
     93                 return -1L; 
     94         }
     95 
     96         /** 
     97          * 判断一个文件是否存在 
     98          * 
     99          * @param filePath 文件路径 
    100          * @return 存在返回true,否则返回false 
    101          */ 
    102         public static boolean isExist(String filePath) { 
    103                 return new File(filePath).exists(); 
    104         }
    105 
    106         /** 
    107          * 本地某个目录下的文件列表(不递归) 
    108          * 
    109          * @param folder ftp上的某个目录 
    110          * @param suffix 文件的后缀名(比如.mov.xml) 
    111          * @return 文件名称列表 
    112          */ 
    113         public static String[] listFilebySuffix(String folder, String suffix) { 
    114                 IOFileFilter fileFilter1 = new SuffixFileFilter(suffix); 
    115                 IOFileFilter fileFilter2 = new NotFileFilter(DirectoryFileFilter.INSTANCE); 
    116                 FilenameFilter filenameFilter = new AndFileFilter(fileFilter1, fileFilter2); 
    117                 return new File(folder).list(filenameFilter); 
    118         }
    119 
    120         /** 
    121          * 将字符串写入指定文件(当指定的父路径中文件夹不存在时,会最大限度去创建,以保证保存成功!) 
    122          * 
    123          * @param res            原字符串 
    124          * @param filePath 文件路径 
    125          * @return 成功标记 
    126          */ 
    127         public static boolean string2File(String res, String filePath) { 
    128                 boolean flag = true; 
    129                 BufferedReader bufferedReader = null; 
    130                 BufferedWriter bufferedWriter = null; 
    131                 try { 
    132                         File distFile = new File(filePath); 
    133                         if (!distFile.getParentFile().exists()) distFile.getParentFile().mkdirs(); 
    134                         bufferedReader = new BufferedReader(new StringReader(res)); 
    135                         bufferedWriter = new BufferedWriter(new FileWriter(distFile)); 
    136                         char buf[] = new char[1024];         //字符缓冲区 
    137                         int len; 
    138                         while ((len = bufferedReader.read(buf)) != -1) { 
    139                                 bufferedWriter.write(buf, 0, len); 
    140                         } 
    141                         bufferedWriter.flush(); 
    142                         bufferedReader.close(); 
    143                         bufferedWriter.close(); 
    144                 } catch (IOException e) { 
    145                         flag = false; 
    146                         e.printStackTrace(); 
    147                 } 
    148                 return flag; 
    149         } 
    150 } 
    151 -------------------------------------------------------------------------------------------------------------
    152 import java.io.File;
    153 import java.util.ArrayList;
    154 import java.util.List;
    155 import java.util.Properties;
    156 
    157 
    158 /**
    159 * 字符串工具箱
    160 *
    161 * @author leizhimin 2008-12-15 22:40:12
    162 */
    163 public final class StringToolkit {
    164   /**
    165   * 将一个字符串的首字母改为大写或者小写
    166   *
    167   * @param srcString 源字符串
    168   * @param flag     大小写标识,ture小写,false大些
    169   * @return 改写后的新字符串
    170   */
    171   public static String toLowerCaseInitial(String srcString, boolean flag) {
    172     StringBuilder sb = new StringBuilder();
    173     if (flag) {
    174         sb.append(Character.toLowerCase(srcString.charAt(0)));
    175     } else {
    176         sb.append(Character.toUpperCase(srcString.charAt(0)));
    177     }
    178     sb.append(srcString.substring(1));
    179     return sb.toString();
    180   }
    181 
    182   /**
    183   * 将一个字符串按照句点(.)分隔,返回最后一段
    184   *
    185   * @param clazzName 源字符串
    186   * @return 句点(.)分隔后的最后一段字符串
    187   */
    188   public static String getLastName(String clazzName) {
    189     String[] ls = clazzName.split("\.");
    190     return ls[ls.length - 1];
    191   }
    192 
    193   /**
    194   * 格式化文件路径,将其中不规范的分隔转换为标准的分隔符,并且去掉末尾的"/"符号。
    195   *
    196   * @param path 文件路径
    197   * @return 格式化后的文件路径
    198   */
    199   public static String formatPath(String path) {
    200     String reg0 = "\\+";
    201     String reg = "\\+|/+";
    202     String temp = path.trim().replaceAll(reg0, "/");
    203     temp = temp.replaceAll(reg, "/");
    204     if (temp.endsWith("/")) {
    205         temp = temp.substring(0, temp.length() - 1);
    206     }
    207     if (System.getProperty("file.separator").equals("\")) {
    208       temp= temp.replace('/','\');
    209     }
    210     return temp;
    211   }
    212 
    213   /**
    214   * 格式化文件路径,将其中不规范的分隔转换为标准的分隔符,并且去掉末尾的"/"符号(适用于FTP远程文件路径或者Web资源的相对路径)。
    215   *
    216   * @param path 文件路径
    217   * @return 格式化后的文件路径
    218   */
    219   public static String formatPath4Ftp(String path) {
    220     String reg0 = "\\+";
    221     String reg = "\\+|/+";
    222     String temp = path.trim().replaceAll(reg0, "/");
    223     temp = temp.replaceAll(reg, "/");
    224     if (temp.endsWith("/")) {
    225         temp = temp.substring(0, temp.length() - 1);
    226     }
    227     return temp;
    228   }
    229 
    230   public static void main(String[] args) {
    231     System.out.println(System.getProperty("file.separator"));
    232     Properties p = System.getProperties();
    233     System.out.println(formatPath("C:///\xxxx\\\\\///\\R5555555.txt"));
    234 
    235 //     List<String> result = series2List("asdf | sdf|siii|sapp|aaat| ", "\|");
    236 //     System.out.println(result.size());
    237 //     for (String s : result) {
    238 //         System.out.println(s);
    239 //     }
    240   }
    241 
    242   /**
    243   * 获取文件父路径
    244   *
    245   * @param path 文件路径
    246   * @return 文件父路径
    247   */
    248   public static String getParentPath(String path) {
    249     return new File(path).getParent();
    250   }
    251 
    252   /**
    253   * 获取相对路径
    254   *
    255   * @param fullPath 全路径
    256   * @param rootPath 根路径
    257   * @return 相对根路径的相对路径
    258   */
    259   public static String getRelativeRootPath(String fullPath, String rootPath) {
    260     String relativeRootPath = null;
    261     String _fullPath = formatPath(fullPath);
    262     String _rootPath = formatPath(rootPath);
    263 
    264     if (_fullPath.startsWith(_rootPath)) {
    265         relativeRootPath = fullPath.substring(_rootPath.length());
    266     } else {
    267         throw new RuntimeException("要处理的两个字符串没有包含关系,处理失败!");
    268     }
    269     if (relativeRootPath == null) return null;
    270     else
    271         return formatPath(relativeRootPath);
    272   }
    273 
    274   /**
    275   * 获取当前系统换行符
    276   *
    277   * @return 系统换行符
    278   */
    279   public static String getSystemLineSeparator() {
    280     return System.getProperty("line.separator");
    281   }
    282 
    283   /**
    284   * 将用“|”分隔的字符串转换为字符串集合列表,剔除分隔后各个字符串前后的空格
    285   *
    286   * @param series 将用“|”分隔的字符串
    287   * @return 字符串集合列表
    288   */
    289   public static List<String> series2List(String series) {
    290     return series2List(series, "\|");
    291   }
    292 
    293   /**
    294   * 将用正则表达式regex分隔的字符串转换为字符串集合列表,剔除分隔后各个字符串前后的空格
    295   *
    296   * @param series 用正则表达式分隔的字符串
    297   * @param regex 分隔串联串的正则表达式
    298   * @return 字符串集合列表
    299   */
    300   private static List<String> series2List(String series, String regex) {
    301     List<String> result = new ArrayList<String>();
    302     if (series != null && regex != null) {
    303         for (String s : series.split(regex)) {
    304           if (s.trim() != null && !s.trim().equals("")) result.add(s.trim());
    305         }
    306     }
    307     return result;
    308   }
    309 
    310   /**
    311   * @param strList 字符串集合列表
    312   * @return 通过“|”串联为一个字符串
    313   */
    314   public static String list2series(List<String> strList) {
    315     StringBuffer series = new StringBuffer();
    316     for (String s : strList) {
    317         series.append(s).append("|");
    318     }
    319     return series.toString();
    320   }
    321 
    322   /**
    323   * 将字符串的首字母转为小写
    324   *
    325   * @param resStr 源字符串
    326   * @return 首字母转为小写后的字符串
    327   */
    328   public static String firstToLowerCase(String resStr) {
    329     if (resStr == null) {
    330         return null;
    331     } else if ("".equals(resStr.trim())) {
    332         return "";
    333     } else {
    334         StringBuffer sb = new StringBuffer();
    335         Character c = resStr.charAt(0);
    336         if (Character.isLetter(c)) {
    337           if (Character.isUpperCase(c))
    338             c = Character.toLowerCase(c);
    339           sb.append(resStr);
    340           sb.setCharAt(0, c);
    341           return sb.toString();
    342         }
    343     }
    344     return resStr;
    345   }
    346 
    347   /**
    348   * 将字符串的首字母转为大写
    349   *
    350   * @param resStr 源字符串
    351   * @return 首字母转为大写后的字符串
    352   */
    353   public static String firstToUpperCase(String resStr) {
    354     if (resStr == null) {
    355         return null;
    356     } else if ("".equals(resStr.trim())) {
    357         return "";
    358     } else {
    359         StringBuffer sb = new StringBuffer();
    360         Character c = resStr.charAt(0);
    361         if (Character.isLetter(c)) {
    362           if (Character.isLowerCase(c))
    363             c = Character.toUpperCase(c);
    364           sb.append(resStr);
    365           sb.setCharAt(0, c);
    366           return sb.toString();
    367         }
    368     }
    369     return resStr;
    370   }
    371 
    372 }
  • 相关阅读:
    百度之星2019 初赛一 题解
    [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)
    [BZOJ2157]旅游(树链剖分/LCT)
    [BZOJ3230]相似子串(后缀数组)
    回文树/回文自动机(PAM)学习笔记
    [CF30E]Tricky and Clever Password(KMP+manacher)
    APIO2019题解
    代码大全
    算法竞赛常用资料整理
    手动修复 Flash CS3 简中化不完全问题
  • 原文地址:https://www.cnblogs.com/androidsj/p/4762294.html
Copyright © 2011-2022 走看看