以更优雅的方式操作文件:
以前我们普遍使用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 FilesJavaWorkspacesmyProject 7 D:Program FilesJavaWorkspacesmyProject. 8 /D:/Program Files/Java/Workspaces/myProject/./ 9 pathList.size = 1161 10 pathList -- D:mntlogsusiness.log 11 pathList -- D:mntlogsdefault.log 12 pathList -- D:mntlogsdigest.log 13 pathList -- D:mntlogserror.log 14 pathList -- D:mntlogsusiness.log 15 pathList -- D:mntlogsdefault.log 16 pathList -- D:mntMX1.log 17 pathList -- D:mntMX2.log 18 pathList -- D:mntMXowndigest.log 19 //此处省略剩余的1000多行
大道至简,这样我们就更方便的操作File,两三行代码搞定!