A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java1.7的java.nio.file包中定义的类使得对文件的操作变得简单,灵活的多,且看下面的例子:
  • package Test1;  
  • import java.io.IOException;  
  • import java.nio.file.DirectoryStream;  
  • import java.nio.file.Files;  
  • import java.nio.file.LinkOption;  
  • import java.nio.file.Path;  
  • import java.nio.file.Paths;  
  • import java.nio.file.StandardCopyOption;  
  • import java.nio.file.attribute.BasicFileAttributes;  
  • import java.util.Date;  
  •   
  • /**
  • * Files类主要是用来对文件的
  • * @author zKF57533
  • */  
  • public class TestFiles {  
  •     /**
  •      * 非常方便的对文件进行移动操作
  •      * 将tt.txt从pathFrom文件夹位置移动到pathTo文件夹下
  •      * <h1>此方法可以和copy这个方法相比较,用法相同,其他增删改查操作请参考api即可</h1>
  •      * @throws IOException  
  •      */  
  •     public static void moveFile() {  
  •         Path pathFrom = Paths.get("e:/logs", "tt.txt");  
  •         //其中e:/logs/errorLog/tt.txt的tt.txt文件可以不存在,如果存在会被替换掉  
  •         Path pathTo = pathFrom.getParent().resolve("errorLog/dd.txt");  
  •         try {  
  •             //文件的大小bytes  
  •             System.out.println(Files.size(pathFrom));  
  •             //调用文件移动方法  
  •             Files.move(pathFrom, pathTo, StandardCopyOption.REPLACE_EXISTING);  
  •         } catch (IOException e) {  
  •             System.err.println("移动文件错误" + e.getMessage());  
  •         }  
  •     }  
  •       
  •     /**
  •      * 测试文件的属性信息
  •      * 包括文件的修改时间、是否是文件夹、创建时间等
  •      */  
  •     @SuppressWarnings("deprecation")  
  •     public static void fileAttributes(){  
  •         Path path = Paths.get("e:/logs");  
  •         //1  
  •         System.out.println(Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS));  
  •         //2  
  •         try {  
  •             //获得文件的基础属性  
  •             BasicFileAttributes attributes = Files.readAttributes(path, BasicFileAttributes.class);  
  •             System.out.println(attributes.isDirectory());  
  •             System.out.println(new Date(attributes.lastModifiedTime().toMillis()).toLocaleString());  
  •         } catch (IOException e) {  
  •             e.printStackTrace();  
  •         }  
  •     }  
  •       
  •     /**
  •      * 创建文件夹
  •      * 遍历文件夹下的文件
  •      */  
  •     public static void createDir(){  
  •         Path path = Paths.get("e:/test/tte");  
  •         try {  
  •             //创建文件夹  
  •             if(Files.notExists(path)){  
  •                 Files.createDirectories(path);  
  •                 System.out.println("create dir");  
  •             }else{  
  •                 System.out.println("dir exists");  
  •             }  
  •             //在创建的文件夹下建几个txt文件,例如  
  •             //2.txt  
  •             //ff  文件夹  
  •             //java.bat  
  •             //_java.txt  
  •             //遍历文件夹下面的文件  
  •             DirectoryStream<Path> paths = Files.newDirectoryStream(path);  
  •             for(Path p : paths){  
  •                 System.out.println(p.getFileName());  
  •             }  
  •             System.out.println();  
  •             //创建一个带有过滤器,过滤文件名以java txt bat结尾的文件  
  •             DirectoryStream<Path> pathsFilter = Files.newDirectoryStream(path, "*.{java,txt,bat}");  
  •             for(Path p : pathsFilter){  
  •                 System.out.println(p.getFileName());  
  •             }  
  •         } catch (IOException e) {  
  •             e.printStackTrace();  
  •         }  
  •     }  
  • }  







评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

8 个回复

倒序浏览
这次是使用Java7提供的新的方法遍历文件夹。

FileVisitor代表一个文件访问器,walkFileTree()方法会自动遍历start路径下的
所有文件和子目录,遍历文件和子目录都会触发FileVisitor中相应的方法。这四个方法在下面的代码中出现。

FileVisitor中的四个方法会返回一个FileVisitorResult,它代是一个枚举类,代表访问之后的行为。

FileVisitor定义了如下几种行为:

CONTINUE:代表访问之后的继续行为

SKIP_SIBLINGS:代表继续访问,但不访问该文件或目录的兄弟文件或目录

SKIP_SUBTREE:继续访问,但不访问该目录或文件的子目录

TERMINATE:终止访问

import java.io.IOException;   
import java.nio.ByteBuffer;   
import java.nio.CharBuffer;   
import java.nio.charset.Charset;   
import java.nio.charset.CharsetDecoder;   
import java.nio.charset.CharsetEncoder;   
import java.nio.file.FileVisitResult;   
import java.nio.file.FileVisitor;   
import java.nio.file.Files;   
import java.nio.file.Paths;   
import java.nio.file.attribute.BasicFileAttributes;   
public class Test {   
    public static void main(String[] args) throws Exception   
    {   
           
        Files.walkFileTree(Paths.get("D:","java"), new FileVisitor(){   
   
            @Override   
            public FileVisitResult preVisitDirectory(Object dir,   
                    BasicFileAttributes attrs) throws IOException {   
                //访问文件夹之前调用   
                System.out.println(dir);   
                return FileVisitResult.CONTINUE;   
            }   
   
            @Override   
            public FileVisitResult visitFile(Object file,   
                    BasicFileAttributes attrs) throws IOException {   
                // 访问文件调用   
                System.out.println(file);   
                return FileVisitResult.CONTINUE;   
            }   
   
            @Override   
            public FileVisitResult visitFileFailed(Object file, IOException exc)   
                    throws IOException {   
                // 访问文件失败时调用   
                return FileVisitResult.CONTINUE;   
            }   
   
            @Override   
            public FileVisitResult postVisitDirectory(Object dir,   
                    IOException exc) throws IOException {   
                // 访问文件夹之后调用   
                return FileVisitResult.CONTINUE;   
            }   
               
        });   
    }   
}  

文件的拷贝、删除、移动及目录的创建操作:
import java.io.IOException;   
import java.nio.file.Files;   
import java.nio.file.Path;   
import java.nio.file.Paths;   
import java.nio.file.StandardCopyOption;   
   
public class TestFileAndDirectory {   
    public static void main(String[] args) throws IOException {   
        Path source = Paths.get("files/loremipsum.txt");   
        System.out.println(source.getFileName());   
            
        Path target = Paths.get("files/backup.txt");   
        // 拷贝文件,注意拷贝参数(如果存在,替换目标文件)     
        Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);   
            
       // Path toDel = Paths.get("files/backup.txt");     
       // Files.delete(toDel);     
       // System.out.println("File deleted.");     
            
        Path newDir = Paths.get("files/newdir");   
        Files.createDirectories(newDir);   
         //将loremipsum.txt移到newdir目录中   
       Files.move(source, newDir.resolve(source.getFileName()), StandardCopyOption.REPLACE_EXISTING);   
            
    }   
   
}   
回复 使用道具 举报
Java 7中如何遍历文件和文件夹
  1. import java.io.IOException;   
  2. import java.nio.file.FileVisitResult;   
  3. import java.nio.file.Path;   
  4. import java.nio.file.SimpleFileVisitor;   
  5. import java.nio.file.attribute.BasicFileAttributes;   
  6.    
  7. public class MyFileVisitor extends SimpleFileVisitor< Path> {   
  8. //  FileVisitor中的四个方法会返回一个FileVisitorResult,它代是一个枚举类,代表访问之后的行为。     
  9. //  FileVisitor定义了如下几种行为:     
  10. //  CONTINUE:代表访问之后的继续行为     
  11. //  SKIP_SIBLINGS:代表继续访问,但不访问该文件或目录的兄弟文件或目录     
  12. //  SKIP_SUBTREE:继续访问,但不访问该目录或文件的子目录     
  13. //  TERMINATE:终止访问     
  14.    
  15.     @Override   
  16.     public FileVisitResult postVisitDirectory(Path dir, IOException exec)   
  17.             throws IOException {   
  18.         // 访问文件夹之前调用     
  19.         System.out.println("Just visited " + dir);   
  20.         return FileVisitResult.CONTINUE;   
  21.     }   
  22.    
  23.     @Override   
  24.     public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)   
  25.             throws IOException {   
  26.         // 访问文件夹之后调用     
  27.         System.out.println("About to visit " + dir);   
  28.         return FileVisitResult.CONTINUE;   
  29.     }   
  30.    
  31.     @Override   
  32.     public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)   
  33.             throws IOException {   
  34.         // 访问文件后调用     
  35.         if (attrs.isRegularFile())   
  36.             System.out.print("Regular File:");   
  37.         System.out.println(file);   
  38.         return FileVisitResult.CONTINUE;   
  39.     }   
  40.    
  41.     @Override   
  42.     public FileVisitResult visitFileFailed(Path file, IOException exc)   
  43.             throws IOException {   
  44.         // 文件不可访问时调用     
  45.         System.out.println(exc.getMessage());   
  46.         return FileVisitResult.CONTINUE;   
  47.     }   
  48.    
  49. }   
复制代码
测试代码:
  1. import java.io.IOException;   
  2. import java.nio.file.Files;   
  3. import java.nio.file.Path;   
  4. import java.nio.file.Paths;   
  5.    
  6. public class TestFileTree {   
  7.     public static void main(String[] args) throws IOException {   
  8.         Path fileDir = Paths.get("files");   
  9.         MyFileVisitor visitor = new MyFileVisitor();   
  10.             
  11.         Files.walkFileTree(fileDir, visitor);   
  12.     }   
  13.    
  14. }
复制代码

运行:
C:\ex>java TestFileTree
About to visit files
About to visit files\newdir
Regular File:files\newdir\psum.txt
Just visited files\newdir
Regular File:files\backup.txt
Regular File:files\loremipsum.txt
Regular File:files\test.txt
Just visited files


回复 使用道具 举报
林思奇 来自手机 中级黑马 2015-5-21 09:03:35
板凳
表示还没学到,看不懂
回复 使用道具 举报
果断收藏了
回复 使用道具 举报
什么情况,不讲详细看不懂呢。
回复 使用道具 举报
刘冬 中级黑马 2015-5-21 09:40:27
7#
学习了!
回复 使用道具 举报
hzhzhen 发表于 2015-5-21 09:11
什么情况,不讲详细看不懂呢。

其实这些方法在API文档中都有的,自己看看文档就完全会用了,我只是指引一下,有些同学可能不知道这些新特性
回复 使用道具 举报
详细到报表
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马