`

java 文件统计 工具类

    博客分类:
  • J2SE
阅读更多

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.TreeMap;

/**
 * list the files in a folder,and statistic files by type
 * 
 * @author eric
 * @date 2011-2-14 下午05:12:18
 */
public class FileStatistic {
	/**
	 * list & statistic files in folder
	 * 
	 * @param folderPath path of folder to statistic
	 * @param outputPath path of result file
	 * @throws IOException
	 */
	public static void statisticFile(String folderPath, String outputPath) throws IOException {
		File folder = new File(folderPath); // folder to statistic
		File outputFile = new File(outputPath); // output file
		if (!outputFile.exists()) { // create output file if not exists
			outputFile.createNewFile();
		}
		FileWriter fw = new FileWriter(outputFile);

		if (!folder.exists()) { // folder not exists
			fw.write("folder not exists!");
			fw.flush();
			return;
		} else {
			fw.write("'" + folderPath + "' statistic result - " + new Date() + "\n");
		}

		List<String> filenameList = new ArrayList<String>();
		TreeMap<String, Integer> typecountMap = new TreeMap<String, Integer>();

		List<File> fList = getFilesRecursive(folder);
		String keyFolder = "folder"; // key for folder
		typecountMap.put(keyFolder, 0);
		for (int i = 0; i < fList.size(); i++) {
			File _file = fList.get(i);
			String _filename = _file.getName();
			filenameList.add(_filename); // store filename

			if (_file.isDirectory()) { // folder
				typecountMap.put(keyFolder, typecountMap.get(keyFolder) + 1);
			} else { // file
				String suf = getSuf(_filename);
				// statistic file type
				if (typecountMap.get(suf) == null) {
					typecountMap.put(suf, 1);
				} else {
					typecountMap.put(suf, typecountMap.get(suf) + 1);
				}
			}
		}

		fw.append("\nfile list:\n");
		for (Iterator<String> it = filenameList.iterator(); it.hasNext();) {
			fw.append("\t" + it.next() + "\n");
		}

		fw.append("\nfile type static:\n");
		for (Iterator<String> it = typecountMap.keySet().iterator(); it.hasNext();) {
			String _key = (String) it.next();
			fw.append("\t" + _key + "\t\t" + typecountMap.get(_key) + "\n");
		}

		fw.flush();
		fw.close();
	}

	/**
	 * get suffix of filename
	 * 
	 * @param filename
	 * @return
	 */
	public static String getSuf(String filename) {
		int lastIndex = filename.lastIndexOf(".");
		if (lastIndex < 0) {
			return "";
		} else {
			return filename.substring(lastIndex);
		}
	}

	/**
	 * 获得 某目录下所有的子文件列表
	 * 
	 * @param root
	 * @return
	 */
	private static List<File> getFilesRecursive(File root) {
		List<File> fileList = new ArrayList<File>();
		List<File> tmpFolderList = Arrays.asList(root);
		while (!tmpFolderList.isEmpty()) {
			tmpFolderList = getFilesRecursiveInner(fileList, tmpFolderList);
		}
		return fileList;
	}

	/**
	 * 获得 将指定目录list 下 直接 子目录/文件 放入 list,并将 直接子目录 放入 另一个 list 返回
	 * 
	 * @param fileList
	 * @param folderList
	 * @return
	 */
	private static List<File> getFilesRecursiveInner(List<File> fileList, List<File> folderList) {
		List<File> subFolderList = new ArrayList<File>();
		for (Iterator<File> it = folderList.iterator(); it.hasNext();) {
			File _folder = (File) it.next();
			File[] _files = _folder.listFiles();
			if (_files != null) {
				for (int i = 0; i < _files.length; i++) {
					File _file = _files[i];
					fileList.add(_file);
					if (_file.isDirectory()) {
						subFolderList.add(_file);
					}
				}
			}
		}
		return subFolderList;
	}

	public static void main(String[] args) throws IOException {
		statisticFile("/usr/lib", "/home/eric/filestatistic.txt");
	}
}
 
分享到:
评论

相关推荐

    Java统计一个文本文件中每一行字符串出现的次数

    Java实现统计一个文本文件中每一行字符串出现的次数,Java实现统计一个文本文件中每一行字符串出现的次数

    java 线程 dump 分析工具 2.3.3

    java 线程Dump 分析工具: Java的TDA线程转储分析器是一个用于分析Sun Java VM生成的线程转储和堆信息的小型Swing GUI(目前用1.4测试)。它从提供的日志文件中解析线程转储和类直方图。它提供关于发现的线程转储的...

    Ldap文件读取工具(Java)

    基于Java平台的Ldap目录和数据读取工具。

    代码行统计工具V2.0

    代码行统计工具V2.0 &lt;br&gt;可以统计任何文本文件类型,可以自定义要统计的类型,默认情况下只统计.cs,.java,.cpp,.c类型的文件 &lt;br&gt;V2.0新增功能 +单击统计信息列表头可以实现自动排序 +新增分类文件...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    Java 中的字数统计工具

    程序员策略并将内容保存在文件中以便处理,然后通过 String 类处理内容以计算单词。程序员可以创建不同的选择,以使项目更具创造性和吸引力。您还可以使用格式化的 Java API 来格式化客户端交付的内容。

    一个开源的Java基础工具包

    一、数据库工具类 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是两种连接池的实现,依赖于数据库配置文件,配置文件的样例参考config/db-example.setting 使用时将db-example.setting复制于${...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    文本内容比较工具

    可以比较连个文件内容哪行有变化,并用颜色标示出来,很方便

    java开源包11

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包6

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包9

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包4

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包101

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包5

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包8

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包10

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包3

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包1

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java程序设计实验指导代码

    7.4 实验3 Java的常用工具类 第8章 字符串 8.1 预备知识 8.2 实验1 一个String类的简单应用 8.3 实验2 单词替换和统计问题 8.4 实验3 字符串的比较和查找最长子串 8.5 实验4 单词逆向输出问题 8.6 实验5 ISBN...

Global site tag (gtag.js) - Google Analytics