使用Files更优雅的对文件操作

 

以更优雅的方式操作文件:

以前我们普遍使用java的File对文件操作,创建文件夹、删除文件、移动文件、获取文件属性等等。。。

如果我们要获取文件夹下所有文件,就需要自己写个递归进行遍历;

如果我们需要读取文件,就必须写IO流来R/W,比较繁琐。

现在java退出了New IO的处理方式,使用的是java.nio.file.*包的类,下来我们举个小例子进行学习:

 1 package com.cheng2839.test;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.net.URI;
 6 import java.nio.file.FileSystems;
 7 import java.nio.file.FileVisitResult;
 8 import java.nio.file.Files;
 9 import java.nio.file.Path;
10 import java.nio.file.Paths;
11 import java.nio.file.SimpleFileVisitor;
12 import java.nio.file.StandardCopyOption;
13 import java.nio.file.StandardOpenOption;
14 import java.nio.file.attribute.BasicFileAttributes;
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.List;
18 
19 /**
20  * 使用Files代替File操作文件
21  *
22  * @author cheng2839
23  * @date 2018年11月16日
24  */
25 public class MyTest010 {
26 
27     public static void claList() throws IOException {
28 
29         // 读取文件
30         Path path = Paths.get("D:/Mytest010");
31         List<String> lineFile = Files.readAllLines(path);
32         System.out.println(lineFile);
33 
34 
35         //复制文件
36         Path copyPath = Paths.get("D:/Mytest010-1");
37         if (Files.exists(copyPath)) {
38             Files.delete(copyPath);
39             System.out.println("delete file:" + copyPath);
40         }
41         copyPath = Files.copy(path, copyPath);
42         System.out.println("copy file:" + copyPath.toString());
43 
44         //查看文件夹个数
45         long fSize = Files.size(Paths.get("D:/"));
46         System.out.println("size file:"+fSize);
47 
48         //以追加模式向文件中写入内容
49         copyPath = Files.write(copyPath, Arrays.asList("", "write one line", "write two line"), StandardOpenOption.APPEND);
50         System.out.println("write file:" + copyPath);
51 
52         //移动文件
53         Files.move(copyPath, Paths.get("D:/Mytest010-2"), StandardCopyOption.REPLACE_EXISTING);
54 
55         //将Path转换为File、Uri
56         Path pp = FileSystems.getDefault().getPath(".");
57         File ppFile = pp.toFile();
58         URI ppUri = pp.toUri();
59         System.out.println(pp.normalize().toString());
60         System.out.println(pp.toRealPath().toString());
61         System.out.println(ppFile.getAbsolutePath());
62         System.out.println(ppUri.getPath());
63 
64         //遍历目录文件
65         List<Path> pathList = new ArrayList<>();
66 
67         Files.walkFileTree(Paths.get("D:/mnt"), new SimpleFileVisitor<Path>(){
68             public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
69                 if (file.toString().toLowerCase().endsWith(".log")) {
70                     pathList.add(file);
71                 }
72                 return FileVisitResult.CONTINUE;
73             }
74         });
75 
76         System.out.println("pathList.size = " + pathList.size());
77         for (Path p : pathList) {
78             System.out.println("pathList -- " + p.toRealPath());
79         }
80     }
81 
82     public static void main(String args[]) throws Exception {
83         claList();
84     }
85 }

 

运行结果如下:

 1 [我是第一行, cheng2839, 今天是个好日子,有个好心情!, 2018年11月16日, 我是新增的一行, ]
 2 copy file:D:\Mytest010-1
 3 size file:20480
 4 write file:D:\Mytest010-1
 5 
 6 D:\Program Files\Java\Workspaces\myProject
 7 D:\Program Files\Java\Workspaces\myProject\.
 8 /D:/Program Files/Java/Workspaces/myProject/./
 9 pathList.size = 1161
10 pathList -- D:\mnt\logs\business.log
11 pathList -- D:\mnt\logs\default.log
12 pathList -- D:\mnt\logs\digest.log
13 pathList -- D:\mnt\logs\error.log
14 pathList -- D:\mnt\logs\business.log
15 pathList -- D:\mnt\logs\default.log
16 pathList -- D:\mnt\MX\1.log
17 pathList -- D:\mnt\MX\2.log
18 pathList -- D:\mnt\MX\own\digest.log
19 //此处省略剩余的1000多行

 

大道至简,这样我们就更方便的操作File,两三行代码搞定!

 

posted @ 2020-04-17 16:27  温柔的星空,让你感动  阅读(493)  评论(0编辑  收藏  举报