FILEUTILS 介绍

  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 == nullreturn 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.   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解在 Spring Boot 中如何实现文件上传和下载功能,对吧?那么,我给您简单介绍一下。 首先,在 Spring Boot 中实现文件上传和下载功能,需要用到 Commons FileUpload 和 Commons IO 这两个工具包。您可以在 Maven 中添加以下依赖: ```xml <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.8.0</version> </dependency> ``` 接下来,我们来看一下文件上传的实现。在 Spring Boot 中,我们可以使用 MultipartFile 类来接收上传的文件。在处理上传请求时,我们需要先判断请求是否为文件上传请求,如果是,则使用 MultipartFile 类来接收上传的文件,并将文件保存到指定的目录中。 ```java @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException { if (!file.isEmpty()) { // 获取文件名 String fileName = file.getOriginalFilename(); // 构建文件保存的路径 String filePath = "D:/upload/"; // 创建文件对象 File dest = new File(filePath + fileName); // 判断目标文件所在的目录是否存在,如果不存在则创建目录 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } // 保存文件 file.transferTo(dest); return "上传成功!"; } return "上传失败!"; } ``` 接下来,我们来看一下文件下载的实现。在 Spring Boot 中,我们可以使用 ResponseEntity 类来将文件以流的形式返回给前端。 ```java @GetMapping("/download") public ResponseEntity<byte[]> download() throws IOException { // 构建文件对象 File file = new File("D:/upload/test.txt"); // 文件不存在 if (!file.exists()) { return ResponseEntity.notFound().build(); } // 构建文件下载的响应头 HttpHeaders headers = new HttpHeaders(); headers.setContentDispositionFormData("attachment", file.getName()); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); // 使用 FileUtils 工具类将文件换成字节数组 byte[] bytes = FileUtils.readFileToByteArray(file); // 返回响应实体对象 return new ResponseEntity<>(bytes, headers, HttpStatus.OK); } ``` 以上就是 Spring Boot 中实现文件上传和下载的基本步骤。需要注意的是,这只是一个简单的示例,实际应用中还需要进行参数校验、异常处理等其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值