在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());
}
}
}

JAVA7遍历文件夹的更多相关文章

  1. C#遍历文件夹下所有文件

    FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...

  2. windowsAPI遍历文件夹(速度高于递归)

    #region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImpo ...

  3. C# 遍历文件夹下所有子文件夹中的文件,得到文件名

    假设a文件夹在F盘下,代码如下.将文件名输出到一个ListBox中using System.Data;using System.Drawing;using System.Linq;using Syst ...

  4. python 遍历文件夹 文件

    python 遍历文件夹 文件   import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...

  5. C#遍历文件夹及文件

    背景: 想自己实现一个网盘系统,于是需要用到遍历文件(夹)操作. C#基本知识梳理: 1.如何获取指定目录包含的文件和子目录 (1). DirectoryInfo.GetFiles():获取目录中(不 ...

  6. Java学习随笔3:遍历文件夹及文件的读取和写入

    import java.io.File; /** * 遍历文件夹 */ public class ScannerFile { public static void main(String[] args ...

  7. java 遍历文件夹里的文件

    Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...

  8. python遍历文件夹下的文件

    在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...

  9. JAVA 遍历文件夹下的所有文件

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

随机推荐

  1. [ruby on rails] 跟我学之(7)创建数据

    通过form来创建数据,本章节将会涉及内容:创建form,用户重导向,渲染views 和 flash消息. 1. views初步 编辑 app/views/posts/index.html.erb这个 ...

  2. python-twisted

    环境:win7 64位,python 2.7.3 安装: http://twistedmatrix.com/Releases/Twisted/14.0/Twisted-14.0.0.win-amd64 ...

  3. Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  4. 部署Office Web Apps Server并配置其与SharePoint 2013的集成

    部署Office Web Apps Server并配置其与SharePoint 2013的集成   Office Web Apps Server 是新的 Office 服务器产品,它提供 Word.P ...

  5. MyBatis3: Could not find SQL statement to include with refid ‘

    错误: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.Incompl ...

  6. kettle转换JavaScript加载外部js文件

    日常开发中,时常会出现这样一种情况.有大量的函数是通用的.而每个JavaScript里面写一遍,给维护带来很大的困扰.因而需要将公共的函数写在外部js文件中.这时就需要引入外部的公共文件了.下面是在转 ...

  7. Paths on a Grid(poj 1942)

    给定一个矩形网格的长m和高n,其中m和n都是unsigned int32类型,一格代表一个单位,就是一步,求从左下角到右上角有多少种走法,每步只能向上或者向右走. //注意循环的时候,要循环小的数,否 ...

  8. Linux系统如何查看CPU型号等

    有时候在下载jdk或其它用图的时候,可能需要查看一下这个cpu的型号 [root@subvm ~]# less /proc/cpuinfo |grep modelmodel           : 4 ...

  9. xtrabackup 增量备份(InnoDB)

    mysql> select * from users; +----+-----------+----------+--------------+ | id | name | password | ...

  10. Redis笔记(二)Redis的部署和启动

    Linux下Redis的部署和启动 下载安装介质 Redis官网地址:http://www.redis.io/目前最新版本是redis-3.0.3. 可以访问 http://download.redi ...