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());
}
}
}
JAVA7遍历文件夹的更多相关文章
- C#遍历文件夹下所有文件
FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...
- windowsAPI遍历文件夹(速度高于递归)
#region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImpo ...
- C# 遍历文件夹下所有子文件夹中的文件,得到文件名
假设a文件夹在F盘下,代码如下.将文件名输出到一个ListBox中using System.Data;using System.Drawing;using System.Linq;using Syst ...
- python 遍历文件夹 文件
python 遍历文件夹 文件 import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...
- C#遍历文件夹及文件
背景: 想自己实现一个网盘系统,于是需要用到遍历文件(夹)操作. C#基本知识梳理: 1.如何获取指定目录包含的文件和子目录 (1). DirectoryInfo.GetFiles():获取目录中(不 ...
- Java学习随笔3:遍历文件夹及文件的读取和写入
import java.io.File; /** * 遍历文件夹 */ public class ScannerFile { public static void main(String[] args ...
- java 遍历文件夹里的文件
Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...
- python遍历文件夹下的文件
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...
- JAVA 遍历文件夹下的所有文件
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
随机推荐
- LNK2005 连接错误解决办法
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@ ...
- HDU 1978 记忆化搜索(dfs+dp)
Y - How many ways Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- hrb 2134 素数
分拆素数和 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 176(99 users) Total Accepted: 106(93 u ...
- wordpress工作原理
WP初始化的过程:当你输入<yourlink>/wordpress对wordpress进行初始化时,wordpress默认会找根目录下的index.php页面,看一下index.php页面 ...
- load url from future 解释
利用url 标签之后,不管urlpatterns里的某个地址叫法怎么改变,Templates里的地址都不用修改了.在模版中调用url标签的时候,需要:{% load url from future % ...
- Meta Programming
[本文链接] http://www.cnblogs.com/hellogiser/p/meta-programming.html [分析] Template Mataprogram,中文叫模板元编程. ...
- iOS tableview 选中Cell后的背景颜色和文字颜色
做下记录,备忘 改文字颜色其实是UILabel的属性,改背景颜色是cell的属性,都和tableview无关. cell.textLabel.textColor = BAR_COLOR; cell.t ...
- Http 协议Header
Responses 部分 Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从原始服务器到代理 ...
- ubuntu dpkg 命令详解
linux的包管理有多种,除了rpm,apt等还有优秀的dpkg,下面是dpkg命令的详细使用教程,希望对你有用.deb包的管理是比较优秀的包管理工具,用的linux系统有 debian ubuntu ...
- 毫秒数转换为指定格式日期的js代码
var format = function(time, format){ var t = new Date(time); var tf = function(i){return (i < 10 ...