View Javadoc
1   package edu.jiangxin.apktoolbox.file.core;
2   
3   import java.io.BufferedInputStream;
4   import java.io.BufferedOutputStream;
5   import java.io.File;
6   import java.io.FileInputStream;
7   import java.io.FileOutputStream;
8   import java.io.IOException;
9   
10  import org.apache.logging.log4j.LogManager;
11  import org.apache.logging.log4j.Logger;
12  
13  /**
14   * 文件或文件夹的简单处理
15   * 
16   * @author jiangxin
17   * @author 2018-09-09
18   */
19  public class FileProcess {
20  
21      private static final Logger logger = LogManager.getLogger(FileProcess.class.getSimpleName());
22      /**
23       * The size of the buffer
24       */
25      final static int BUFFERSIZE = 1024 * 5;
26  
27      /**
28       * 复制文件
29       * 
30       * @param srcFileString
31       * @param desFileString
32       */
33      public static void copyFile(String srcFileString, String desFileString) {
34          File srcFileFile = new File(srcFileString);
35          File desFileFile = new File(desFileString);
36  
37          try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(srcFileFile));
38                  BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(desFileFile))) {
39  
40              // 尚未进行覆盖判断 bad
41              byte[] buffer = new byte[BUFFERSIZE];
42              int len;
43              while ((len = in.read(buffer)) != -1) {
44                  out.write(buffer, 0, len);
45              }
46              out.flush();
47          } catch (IOException e) {
48              logger.error("copy file exception", e);
49          }
50          logger.info("Success to copy {} to {}", srcFileString, desFileString);
51      }
52  
53      /**
54       * 复制文件夹
55       * 
56       * @param srcDirString
57       * @param desDirString
58       * @throws IOException
59       */
60      public static void copyDirectory(String srcDirString, String desDirString) {
61          File srcDirFile = new File(srcDirString);
62          File desDirFile = new File(desDirString);
63          if (!desDirFile.exists()) {
64              boolean ret = desDirFile.mkdirs();
65              if (!ret) {
66                  logger.error("mkidrs failed: " + desDirFile);
67                  return;
68              }
69          }
70  
71          File[] files = srcDirFile.listFiles();
72          if (files == null) {
73              return;
74          }
75          for (int i = 0; i < files.length; i++) {
76              if (files[i].isFile()) {
77                  String srcFileTemp = files[i].getAbsolutePath();
78                  String desFileTemp = desDirFile.getAbsolutePath() + File.separator + files[i].getName();
79                  copyFile(srcFileTemp, desFileTemp);
80              }
81              if (files[i].isDirectory()) {
82                  String srcDirTemp = files[i].getAbsolutePath();
83                  String desDirTemp = desDirFile.getAbsolutePath() + File.separator + files[i].getName();
84                  copyDirectory(srcDirTemp, desDirTemp);
85              }
86          }
87          System.out.println("Success to copy " + srcDirString + " to " + desDirString);
88      }
89  
90      /**
91       * 移动文件
92       * 
93       * @param srcFileString
94       * @param desFileString
95       * @param isOverride
96       * @throws IOException
97       */
98      public static void moveFile(String srcFileString, String desFileString, boolean isOverride) {
99          File srcFileFile = new File(srcFileString);
100         File desFileFile = new File(desFileString);
101         if (isOverride) {
102             if (desFileFile.delete()) {
103                 System.out.println("Success to delete desFile");
104             }
105         } else {
106             return;
107         }
108         copyFile(srcFileString, desFileString);
109         if (srcFileFile.delete()) {
110             System.out.println("Success to delete srcFile");
111         }
112 
113     }
114 
115     /**
116      * 递归删除目录
117      * 
118      * @param dir
119      * @return 返回是否删除成功
120      */
121     public static boolean deleteDir(String dir) {
122         File dirFile = new File(dir);
123         if (dirFile.isDirectory()) {
124             String[] files = dirFile.list();
125             if (files != null) {
126                 for (int i = 0; i < files.length; i++) {
127                     String temp = dirFile.getAbsolutePath() + File.separator.toString() + files[i];
128                     boolean success = deleteDir(temp);
129                     if (!success) {
130                         System.out.println("Something error!");
131                         return false;
132                     }
133                 }
134             }
135         }
136         boolean ret = dirFile.delete();
137         if (ret) {
138             System.out.println("Success to delete " + dir);
139         } else {
140             System.out.println("Something error!");
141         }
142         return ret;
143     }
144 
145     /**
146      * 删除目录组
147      * 
148      * @param dirs
149      * @return 返回是否删除成功
150      */
151     public static boolean deleteDirs(String[] dirs) {
152         for (int i = 0; i < dirs.length; i++) {
153             boolean isSuccessful = deleteDir(dirs[i]);
154             if (isSuccessful == true) {
155                 System.out.println("成功删除目录:" + dirs[i]);
156             }
157         }
158         return false;
159     }
160 }