JAVA FileUtils(文件读写以及操作工具类)

文件操作常用功能:

  1 package com.suning.yypt.business.report;
  2 
  3 import java.io.*;
  4 import java.util.*;
  5 
  6 @SuppressWarnings({"resource","unused"})
  7 public class FileUtils {
  8 
  9     /**
 10      * 获取windows/linux的项目根目录
 11      * @return
 12      */
 13     public static String getConTextPath(){
 14         String fileUrl = Thread.currentThread().getContextClassLoader().getResource("").getPath();
 15         if("usr".equals(fileUrl.substring(1,4))){
 16             fileUrl = (fileUrl.substring(0,fileUrl.length()-16));//linux
 17         }else{
 18             fileUrl = (fileUrl.substring(1,fileUrl.length()-16));//windows
 19         }
 20         return fileUrl;
 21     }
 22 
 23     /**
 24      * 字符串转数组
 25      * @param str 字符串
 26      * @param splitStr 分隔符
 27      * @return
 28      */
 29     public static String[] StringToArray(String str,String splitStr){
 30         String[] arrayStr = null;
 31         if(!"".equals(str) && str != null){
 32             if(str.indexOf(splitStr)!=-1){
 33                 arrayStr = str.split(splitStr);
 34             }else{
 35                 arrayStr = new String[1];
 36                 arrayStr[0] = str;
 37             }
 38         }
 39         return arrayStr;
 40     }
 41 
 42     /**
 43      * 读取文件
 44      *
 45      * @param Path
 46      * @return
 47      */
 48     public static String ReadFile(String Path) {
 49         BufferedReader reader = null;
 50         String laststr = "";
 51         try {
 52             FileInputStream fileInputStream = new FileInputStream(Path);
 53             InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
 54             reader = new BufferedReader(inputStreamReader);
 55             String tempString = null;
 56             while ((tempString = reader.readLine()) != null) {
 57                 laststr += tempString;
 58             }
 59             reader.close();
 60         } catch (IOException e) {
 61             e.printStackTrace();
 62         } finally {
 63             if (reader != null) {
 64                 try {
 65                     reader.close();
 66                 } catch (IOException e) {
 67                     e.printStackTrace();
 68                 }
 69             }
 70         }
 71         return laststr;
 72     }
 73 
 74     /**
 75      * 获取文件夹下所有文件的名称 + 模糊查询(当不需要模糊查询时,queryStr传空或null即可)
 76      * 1.当路径不存在时,map返回retType值为1
 77      * 2.当路径为文件路径时,map返回retType值为2,文件名fileName值为文件名
 78      * 3.当路径下有文件夹时,map返回retType值为3,文件名列表fileNameList,文件夹名列表folderNameList
 79      * @param folderPath 路径
 80      * @param queryStr 模糊查询字符串
 81      * @return
 82      */
 83     public static HashMap<String, Object> getFilesName(String folderPath , String queryStr) {
 84         HashMap<String, Object> map = new HashMap<>();
 85         List<String> fileNameList = new ArrayList<>();//文件名列表
 86         List<String> folderNameList = new ArrayList<>();//文件夹名列表
 87         File f = new File(folderPath);
 88         if (!f.exists()) { //路径不存在
 89             map.put("retType", "1");
 90         }else{
 91             boolean flag = f.isDirectory();
 92             if(flag==false){ //路径为文件
 93                 map.put("retType", "2");
 94                 map.put("fileName", f.getName());
 95             }else{ //路径为文件夹
 96                 map.put("retType", "3");
 97                 File fa[] = f.listFiles();
 98                 queryStr = queryStr==null ? "" : queryStr;//若queryStr传入为null,则替换为空(indexOf匹配值不能为null)
 99                 for (int i = 0; i < fa.length; i++) {
100                     File fs = fa[i];
101                     if(fs.getName().indexOf(queryStr)!=-1){
102                         if (fs.isDirectory()) {
103                             folderNameList.add(fs.getName());
104                         } else {
105                             fileNameList.add(fs.getName());
106                         }
107                     }
108                 }
109                 map.put("fileNameList", fileNameList);
110                 map.put("folderNameList", folderNameList);
111             }
112         }
113         return map;
114     }
115 
116     /**
117      * 以行为单位读取文件,读取到最后一行
118      * @param filePath
119      * @return
120      */
121     public static List<String> readFileContent(String filePath) {
122         BufferedReader reader = null;
123         List<String> listContent = new ArrayList<>();
124         try {
125             reader = new BufferedReader(new FileReader(filePath));
126             String tempString = null;
127             int line = 1;
128             // 一次读入一行,直到读入null为文件结束
129             while ((tempString = reader.readLine()) != null) {
130                 listContent.add(tempString);
131                 line++;
132             }
133             reader.close();
134         } catch (IOException e) {
135             e.printStackTrace();
136         } finally {
137             if (reader != null) {
138                 try {
139                     reader.close();
140                 } catch (IOException e1) {
141                 }
142             }
143         }
144         return listContent;
145     }
146 
147     /**
148      * 读取指定行数据 ,注意:0为开始行
149      * @param filePath
150      * @param lineNumber
151      * @return
152      */
153     public static String readLineContent(String filePath,int lineNumber){
154         BufferedReader reader = null;
155         String lineContent="";
156         try {
157             reader = new BufferedReader(new FileReader(filePath));
158             int line=0;
159             while(line<=lineNumber){
160                 lineContent=reader.readLine();
161                 line++;
162             }
163             reader.close();
164         } catch (IOException e) {
165             e.printStackTrace();
166         } finally {
167             if (reader != null) {
168                 try {
169                     reader.close();
170                 } catch (IOException e1) {
171                 }
172             }
173         }
174         return lineContent;
175     }
176 
177     /**
178      * 读取从beginLine到endLine数据(包含beginLine和endLine),注意:0为开始行
179      * @param filePath
180      * @param beginLineNumber 开始行
181      * @param endLineNumber 结束行
182      * @return
183      */
184     public static List<String> readLinesContent(String filePath,int beginLineNumber,int endLineNumber){
185         List<String> listContent = new ArrayList<>();
186         try{
187             int count = 0;
188             BufferedReader reader = new BufferedReader(new FileReader(filePath));
189             String content = reader.readLine();
190             while(content !=null){
191                 if(count >= beginLineNumber && count <=endLineNumber){
192                     listContent.add(content);
193                 }
194                 content = reader.readLine();
195                 count++;
196             }
197         } catch(Exception e){
198         }
199         return listContent;
200     }
201 
202     /**
203      * 读取若干文件中所有数据
204      * @param listFilePath
205      * @return
206      */
207     public static List<String> readFileContent_list(List<String> listFilePath) {
208         List<String> listContent = new ArrayList<>();
209         for(String filePath : listFilePath){
210             File file = new File(filePath);
211             BufferedReader reader = null;
212             try {
213                 reader = new BufferedReader(new FileReader(file));
214                 String tempString = null;
215                 int line = 1;
216                 // 一次读入一行,直到读入null为文件结束
217                 while ((tempString = reader.readLine()) != null) {
218                     listContent.add(tempString);
219                     line++;
220                 }
221                 reader.close();
222             } catch (IOException e) {
223                 e.printStackTrace();
224             } finally {
225                 if (reader != null) {
226                     try {
227                         reader.close();
228                     } catch (IOException e1) {
229                     }
230                 }
231             }
232         }
233         return listContent;
234     }
235 
236     /**
237      * 文件数据写入(如果文件夹和文件不存在,则先创建,再写入)
238      * @param filePath
239      * @param content
240      * @param flag true:如果文件存在且存在内容,则内容换行追加;false:如果文件存在且存在内容,则内容替换
241      */
242     public static String fileLinesWrite(String filePath,String content,boolean flag){
243         String filedo = "write";
244         FileWriter fw = null;
245         try {
246             File file=new File(filePath);
247             //如果文件夹不存在,则创建文件夹
248             if (!file.getParentFile().exists()){
249                 file.getParentFile().mkdirs();
250             }
251             if(!file.exists()){//如果文件不存在,则创建文件,写入第一行内容
252                 file.createNewFile();
253                 fw = new FileWriter(file);
254                 filedo = "create";
255             }else{//如果文件存在,则追加或替换内容
256                 fw = new FileWriter(file, flag);
257             }
258         } catch (IOException e) {
259             e.printStackTrace();
260         }
261         PrintWriter pw = new PrintWriter(fw);
262         pw.println(content);
263         pw.flush();
264         try {
265             fw.flush();
266             pw.close();
267             fw.close();
268         } catch (IOException e) {
269             e.printStackTrace();
270         }
271         return filedo;
272     }
273 
274     /**
275      * 写文件
276      * @param ins
277      * @param out
278      */
279     public static void writeIntoOut(InputStream ins, OutputStream out) {
280         byte[] bb = new byte[10 * 1024];
281         try {
282             int cnt = ins.read(bb);
283             while (cnt > 0) {
284                 out.write(bb, 0, cnt);
285                 cnt = ins.read(bb);
286             }
287         } catch (IOException e) {
288             e.printStackTrace();
289         } finally {
290             try {
291                 out.flush();
292                 ins.close();
293                 out.close();
294             } catch (IOException e) {
295                 e.printStackTrace();
296             }
297         }
298     }
299 
300     /**
301      * 判断list中元素是否完全相同(完全相同返回true,否则返回false)
302      * @param list
303      * @return
304      */
305     private static boolean hasSame(List<? extends Object> list){
306         if(null == list)
307             return false;
308         return 1 == new HashSet<Object>(list).size();
309     }
310 
311     /**
312      * 判断list中是否有重复元素(无重复返回true,否则返回false)
313      * @param list
314      * @return
315      */
316     private static boolean hasSame2(List<? extends Object> list){
317         if(null == list)
318             return false;
319         return list.size() == new HashSet<Object>(list).size();
320     }
321 
322     /**
323      * 增加/减少天数
324      * @param date
325      * @param num
326      * @return
327      */
328     public static Date DateAddOrSub(Date date, int num) {
329         Calendar startDT = Calendar.getInstance();
330         startDT.setTime(date);
331         startDT.add(Calendar.DAY_OF_MONTH, num);
332         return startDT.getTime();
333     }
334     //https://www.cnblogs.com/chenhuan001/p/6575053.html
335     /**
336      * 递归删除文件或者目录
337      * @param file_path
338      */
339     public static void deleteEveryThing(String file_path) {
340         try{
341             File file=new File(file_path);
342             if(!file.exists()){
343                 return ;
344             }
345             if(file.isFile()){
346                 file.delete();
347             }else{
348                 File[] files = file.listFiles();
349                 for(int i=0;i<files.length;i++){
350                     String root=files[i].getAbsolutePath();//得到子文件或文件夹的绝对路径
351                     deleteEveryThing(root);
352                 }
353                 file.delete();
354             }
355         } catch(Exception e) {
356             System.out.println("删除文件失败");
357         }
358     }
359     /**
360      * 创建目录
361      * @param dir_path
362      */
363     public static void mkDir(String dir_path) {
364         File myFolderPath = new File(dir_path);
365         try {
366             if (!myFolderPath.exists()) {
367                 myFolderPath.mkdir();
368             }
369         } catch (Exception e) {
370             System.out.println("新建目录操作出错");
371             e.printStackTrace();
372         }
373     }
374 
375     //https://blog.csdn.net/lovoo/article/details/77899627
376     /**
377      * 判断指定的文件是否存在。
378      *
379      * @param fileName
380      * @return
381      */
382     public static boolean isFileExist(String fileName) {
383         return new File(fileName).isFile();
384     }
385 
386     /* 得到文件后缀名
387      *
388      * @param fileName
389      * @return
390      */
391     public static String getFileExt(String fileName) {
392         int point = fileName.lastIndexOf('.');
393         int length = fileName.length();
394         if (point == -1 || point == length - 1) {
395             return "";
396         } else {
397             return fileName.substring(point + 1, length);
398         }
399     }
400 
401     /**
402      * 删除文件夹及其下面的子文件夹
403      *
404      * @param dir
405      * @throws IOException
406      */
407     public static void deleteDir(File dir) throws IOException {
408         if (dir.isFile())
409             throw new IOException("IOException -> BadInputException: not a directory.");
410         File[] files = dir.listFiles();
411         if (files != null) {
412             for (int i = 0; i < files.length; i++) {
413                 File file = files[i];
414                 if (file.isFile()) {
415                     file.delete();
416                 } else {
417                     deleteDir(file);
418                 }
419             }
420         }
421         dir.delete();
422     }
423 
424     /**
425      * 复制文件
426      *
427      * @param src
428      * @param dst
429      * @throws Exception
430      */
431     public static void copy(File src, File dst) throws Exception {
432         int BUFFER_SIZE = 4096;
433         InputStream in = null;
434         OutputStream out = null;
435         try {
436             in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
437             out = new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE);
438             byte[] buffer = new byte[BUFFER_SIZE];
439             int len = 0;
440             while ((len = in.read(buffer)) > 0) {
441                 out.write(buffer, 0, len);
442             }
443         } catch (Exception e) {
444             throw e;
445         } finally {
446             if (null != in) {
447                 try {
448                     in.close();
449                 } catch (IOException e) {
450                     e.printStackTrace();
451                 }
452                 in = null;
453             }
454             if (null != out) {
455                 try {
456                     out.close();
457                 } catch (IOException e) {
458                     e.printStackTrace();
459                 }
460                 out = null;
461             }
462         }
463     }
464 
465 
466 }

 

posted on 2019-07-05 14:07  cxhfuujust  阅读(5384)  评论(0编辑  收藏  举报

导航