zoukankan      html  css  js  c++  java
  • JAVA7遍历文件夹

    在JAVA7中提供了新的遍历文件的方法,比原有File类的递归遍历效率要好大约30%左右。

    测试结果:

    测试用的File类的递归,是经过对比测试几种方法,找出相对效率较好的来和JAVA7进行测试。

    1、12749个文件夹,83805个文件,大小43.5 GB

    JAVA7:执行耗时 1.15 秒。

    File类:执行耗时 2.131 秒。

    2、127823 个文件夹,562525 个文件,大小133 GB

    JAVA7:执行耗时 11.468 秒。

    File类:执行耗时 16.449 秒。

    下面是测试代码

    JAVA7

    Visitor类的实现代码

    package test;
    
    import java.io.IOException;
    import java.nio.file.FileVisitResult;
    import java.nio.file.Path;
    import java.nio.file.SimpleFileVisitor;
    import java.nio.file.attribute.BasicFileAttributes;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MyFileVisitor extends SimpleFileVisitor<Path> {
        private List<String> list_file =new ArrayList<String>(); 
    
        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exec)
                throws IOException {
            // 访问文件夹之前调用
            //System.out.println("Just visited " + dir);
            return FileVisitResult.CONTINUE;
        }
    
        @Override
        public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
                throws IOException {
            // 访问文件夹之后调用
            //System.out.println("About to visit " + dir);
            return FileVisitResult.CONTINUE;
        }
    
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                throws IOException {
            // 访问文件后调用        
            if (attrs.isRegularFile())            
                list_file.add(file.getFileName().toString());    //插入一个List<String>有别的用。        
            return FileVisitResult.CONTINUE;
        }
    
        @Override
        public FileVisitResult visitFileFailed(Path file, IOException exc)
                throws IOException {
            // 文件不可访问时调用
            //System.out.println(exc.getMessage());
            return FileVisitResult.CONTINUE;
        }
        
        public List<String> getList() {  
               return list_file;
         }  
    
    
    }

    调用

    public static void main(String[] args) throws IOException {
                    
            Path fileDir = Paths.get("E:\拷贝\资料");  
             MyFileVisitor visitor = new MyFileVisitor();
             long a=System.currentTimeMillis();
             Files.walkFileTree(fileDir, visitor);
             //放到一个List<String>是有别的用处,跟测试无关
             List<String> list = visitor.getList();
             System.out.println("执行耗时 : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");
            
    
        }

    File类

    private static void getAllFileInfo(String path)
        {
            File dirFile = new File(path);          
            File[] files = dirFile.listFiles();  
            //开始遍历所有文件
           for(int i=0;i<files.length;i++)
           {
              //子文件   
              if(files[i].isFile())
                {
                    File f = files[i];                
                }
                else //文件夹
                {
                    File f = files[i];                
                    getAllFileInfo(f.getAbsolutePath());
                }
           }
        }
  • 相关阅读:
    发布Web端
    回溯算法套路详解(转)
    埋点自动化测试框架设计
    Mitmproxy + Python 做拦截代理
    面向对象三大特性-多态的思考
    java集合类-Set接口
    java集合类-List接口
    java集合类-集合框架体系
    测试的Python、 Java语言之争
    Python迭代器、生成器
  • 原文地址:https://www.cnblogs.com/kgdxpr/p/3187575.html
Copyright © 2011-2022 走看看