且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JDK 7的文件和目录访问

更新时间:2022-08-14 20:56:14

JDK 7进行文件树复制和遍历非常简单。与JDK 6或更早的版本相比,你会发现使用JDK 7的NIO包很简单,所需的代码非常少。

本文用两个例子展示了JDK 7的文件I/O机制,java.nio.file包提供了对文件I/O的支持,可以访问默认的文件系统。这个包非常直观,易于使用。

例子所需的工具:
1. JDK 7
2. Eclipse 4.2

在例子中,我们使用java.nio.file.Files所支持的文件操作。这个类包含了许多静态方法,比如对文件和目录的复制、移动、删除、遍历文件树等。

java.nio.file.Path是java.nio.file包的主要的入口点之一。Path类表示文件系统的路径。

例1:文件复制操作
从源文件复制到目标文件,使用Files.copy方法。我们还需要提供不同的选项——使用java.nio.file.CopyOption来指定怎样复制文件。
CopyOpDemo.java代码如下:
  1. package test;  
  2.   
  3.   
  4. import java.io.IOException;  
  5. import java.nio.file.CopyOption;  
  6. import java.nio.file.Files;  
  7. import java.nio.file.Path;  
  8. import java.nio.file.Paths;  
  9. import java.nio.file.StandardCopyOption;  
  10.   
  11.   
  12. public class CopyOpDemo {  
  13.     public static void main(String[] args){  
  14.         // 待复制的源文件  
  15.         Path srcFile = Paths.get("D:/tmp/test1.htm");  
  16.         // 复制后的目标文件  
  17.         Path targetFile = Paths.get("D:/destFile.txt");  
  18.         // 复制选项定义  
  19.         CopyOption[] options = new CopyOption[]{  
  20.             StandardCopyOption.REPLACE_EXISTING  
  21.         };  
  22.         // 复制文件  
  23.         try {  
  24.             Files.copy(srcFile, targetFile, options);  
  25.             System.out.println("复制成功!");  
  26.         } catch (IOException e) {  
  27.             e.printStackTrace();  
  28.         }  
  29.     }  
  30. }  

作者:chszs,转载需注明。作者博客主页:http://blog.csdn.net/chszs

例2:遍历文件树
要遍历文件树,使用Files.walkFileTree方法。此方法需要指定根路径或起始路径。以及要重写SimpleFileVisitor的实现类的两个方法:preVisitDirectory和visitFile。两个方法定义了在访问目录和文件期间想做的事。这使得我们要打印目录和文件名就非常简单了。
RecursiveFileListDemo.java代码如下:
  1. package test;  
  2.   
  3. import java.nio.file.FileVisitResult;  
  4. import java.nio.file.Files;  
  5. import java.io.IOException;  
  6. import java.nio.file.Path;  
  7. import java.nio.file.Paths;  
  8. import java.nio.file.SimpleFileVisitor;  
  9. import java.nio.file.attribute.BasicFileAttributes;  
  10.   
  11.   
  12. public class RecursiveFileListDemo {  
  13.     public static void main(String[] args) throws IOException{  
  14.         Path startPath = Paths.get("D:/tmp/s5-blank");  
  15.         Files.walkFileTree(startPath, new SimpleFileVisitor(){  
  16.             @Override  
  17.             public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs){  
  18.                 System.out.println(">>>>Dir : " + dir);  
  19.                 return FileVisitResult.CONTINUE;  
  20.             }  
  21.               
  22.             @Override  
  23.             public FileVisitResult visitFile(Path file, BasicFileAttributes attrs){  
  24.                 System.out.println("File : " + file);  
  25.                 return FileVisitResult.CONTINUE;  
  26.             }  
  27.         });  
  28.     }  
  29. }  

文件目录如下图所示:
JDK 7的文件和目录访问

那么程序执行后,控制台输出如下:
  1. >>>>Dir : D:\tmp\s5-blank  
  2. File : D:\tmp\s5-blank\.DS_Store  
  3. File : D:\tmp\s5-blank\s5-blank.html  
  4. >>>>Dir : D:\tmp\s5-blank\ui  
  5. File : D:\tmp\s5-blank\ui\.DS_Store  
  6. >>>>Dir : D:\tmp\s5-blank\ui\default  
  7. File : D:\tmp\s5-blank\ui\default\.DS_Store  
  8. File : D:\tmp\s5-blank\ui\default\blank.gif  
  9. File : D:\tmp\s5-blank\ui\default\bodybg.gif  
  10. File : D:\tmp\s5-blank\ui\default\framing.css  
  11. File : D:\tmp\s5-blank\ui\default\iepngfix.htc  
  12. File : D:\tmp\s5-blank\ui\default\opera.css  
  13. File : D:\tmp\s5-blank\ui\default\outline.css  
  14. File : D:\tmp\s5-blank\ui\default\pretty.css  
  15. File : D:\tmp\s5-blank\ui\default\print.css  
  16. File : D:\tmp\s5-blank\ui\default\s5-core.css  
  17. File : D:\tmp\s5-blank\ui\default\slides.css  
  18. File : D:\tmp\s5-blank\ui\default\slides.js