收索文件夹及子文件夹下的txt,并统计txt文件的单词出现的个数
2010-10-10 18:17
423 查看
//FileReader.java
package com.xie.tencent;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
/**
* 这是tencent2010-10-10的java笔试最后一题。
* 读取某个文件夹及其子文件夹的*.txt文件,输出所有文件名
* 同时,需要读取文件中出现的单词,并统计各个单词出现的个数,
* 在文件中以","分隔,也可以是其它分隔符号。
* @author centre
*
*/
/*
* 这个类实现分析文件夹中所包含的.txt文件,并提供方法输出文件名
*/
public class FileReader {
/**
* 根据传入参数,找到需要的文件类型,算法:递归
* @author centre
* @param baseDirName 文件目录(可以是一个目录,也可以是一个文件)
* @param targetFileName 需要查找的文件的类型(正则表达式)
* @param resultFiles 相关文件的list的集合
*/
public void findFiles(String baseDirName,String targetFileName,List<File> resultFiles){
String tmpFileName=null;
Pattern p=null;
File baseDir=new File(baseDirName);
if (!baseDir.exists()) {
System.out.println("文件或者文件夹"+baseDirName+"不存在。");
return;
}
if (baseDir.isDirectory()) {
//如果baseDir是文件夹,递归分析该文件夹
String[]fileList=baseDir.list();
for (int i = 0; i < fileList.length; i++) {
//File readfile = new File(baseDirName + "//" + filelist[i]);//注意//和/的区别
File readFile=new File(baseDirName+"/"+fileList[i]);
if (readFile.isDirectory()) {
findFiles(baseDirName + "/" + fileList[i],targetFileName,resultFiles);
}else {
tmpFileName=readFile.getName();
p= Pattern.compile(targetFileName);
if (p.matcher(tmpFileName).matches()) {
resultFiles.add(readFile.getAbsoluteFile());
}
}
}
}else {
//如果baseDir不是文件夹,直接匹配该文件
tmpFileName=baseDir.getName();
p= Pattern.compile(targetFileName);
if (p.matcher(tmpFileName).matches()) {
resultFiles.add(baseDir.getAbsoluteFile());
}
}
}
/**
* @author centre
* @param aList 存放找到文件的集合
* @return 一个hashMap 存放文件中的单词,及单词个数
*/
public HashMap<String, Integer> count(List<File> aList){
CounterWord cw=new CounterWord(this);
for (int i = 0; i < aList.size(); i++) {
File f=aList.get(i);
cw.openFile(f.getAbsolutePath());
//System.out.println("文件"+(i+1)+":"+f.getAbsolutePath());
}
return cw.gethMap();
}
public static void main(String[] args) {
FileReader fr=new FileReader();
List<File> aList=new ArrayList<File>();
String base="D://project//TencentLast//files";//files(test1.txt,test2.txt,filetest1(test3.txt,test4.txt filetest2)(test5.txt,test6.txt))*.txt文件中的单词以逗号隔开
String fileEndRex=")";//(.txt文件的正则表达式
fr.findFiles(base,fileEndRex, aList);
HashMap<String,Integer> hMap=fr.count(aList);
Set<String> hset=hMap.keySet();
for (Iterator<String> iterator = hset.iterator(); iterator.hasNext();) {
String word = (String) iterator.next();
System.out.println("word:"+word+" "+hMap.get(word));
}
}
}
//CountWord.java
package com.xie.tencent;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
/**
* 这个类用于统计某个单词在所有文件中出现的次数。
* @author centre
*
*/
public class CounterWord {
FileReader fr;
private HashMap<String, Integer> hMap=new HashMap<String, Integer>();;
public HashMap<String, Integer> gethMap() {
return hMap;
}
/**
* 这个构造方法用于持有对方引用
* @author centre
* @param f FileReader
*/
public CounterWord(FileReader f) {
fr=f;
}
/**
* 根据传入的文件路径,打开文件,同时分析其中的单词个数,
* 存放进一个HashMap
* @author centre
* @param path String 文件的绝对路径
* @return 返回值貌似没用,在需要时可以接收
*/
public boolean openFile(String path){
boolean b=true;
try {
FileInputStream fis=new FileInputStream(path);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
try {
String words=br.readLine();
while (words!=null) {
//System.out.println(words);
String[] word=words.split(",");
for (int i = 0; i < word.length; i++) {
addWordCount(word[i]);
}
words=br.readLine();
}
} catch (IOException e) {
System.out.println("文件读取异常。");
e.printStackTrace();
}
} catch (FileNotFoundException e) {
System.out.println("没有找到该文件:"+path);
b=false;
e.printStackTrace();
}
return b;
}
/**
* 将单词放进map,同时统计单词出现的次数
* @param word String 单词
*/
private void addWordCount(String word) {
if (hMap.containsKey(word)) {
hMap.put(word, hMap.get(word).intValue()+1);
}else {
hMap.put(word, 1);
}
}
}
package com.xie.tencent;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
/**
* 这是tencent2010-10-10的java笔试最后一题。
* 读取某个文件夹及其子文件夹的*.txt文件,输出所有文件名
* 同时,需要读取文件中出现的单词,并统计各个单词出现的个数,
* 在文件中以","分隔,也可以是其它分隔符号。
* @author centre
*
*/
/*
* 这个类实现分析文件夹中所包含的.txt文件,并提供方法输出文件名
*/
public class FileReader {
/**
* 根据传入参数,找到需要的文件类型,算法:递归
* @author centre
* @param baseDirName 文件目录(可以是一个目录,也可以是一个文件)
* @param targetFileName 需要查找的文件的类型(正则表达式)
* @param resultFiles 相关文件的list的集合
*/
public void findFiles(String baseDirName,String targetFileName,List<File> resultFiles){
String tmpFileName=null;
Pattern p=null;
File baseDir=new File(baseDirName);
if (!baseDir.exists()) {
System.out.println("文件或者文件夹"+baseDirName+"不存在。");
return;
}
if (baseDir.isDirectory()) {
//如果baseDir是文件夹,递归分析该文件夹
String[]fileList=baseDir.list();
for (int i = 0; i < fileList.length; i++) {
//File readfile = new File(baseDirName + "//" + filelist[i]);//注意//和/的区别
File readFile=new File(baseDirName+"/"+fileList[i]);
if (readFile.isDirectory()) {
findFiles(baseDirName + "/" + fileList[i],targetFileName,resultFiles);
}else {
tmpFileName=readFile.getName();
p= Pattern.compile(targetFileName);
if (p.matcher(tmpFileName).matches()) {
resultFiles.add(readFile.getAbsoluteFile());
}
}
}
}else {
//如果baseDir不是文件夹,直接匹配该文件
tmpFileName=baseDir.getName();
p= Pattern.compile(targetFileName);
if (p.matcher(tmpFileName).matches()) {
resultFiles.add(baseDir.getAbsoluteFile());
}
}
}
/**
* @author centre
* @param aList 存放找到文件的集合
* @return 一个hashMap 存放文件中的单词,及单词个数
*/
public HashMap<String, Integer> count(List<File> aList){
CounterWord cw=new CounterWord(this);
for (int i = 0; i < aList.size(); i++) {
File f=aList.get(i);
cw.openFile(f.getAbsolutePath());
//System.out.println("文件"+(i+1)+":"+f.getAbsolutePath());
}
return cw.gethMap();
}
public static void main(String[] args) {
FileReader fr=new FileReader();
List<File> aList=new ArrayList<File>();
String base="D://project//TencentLast//files";//files(test1.txt,test2.txt,filetest1(test3.txt,test4.txt filetest2)(test5.txt,test6.txt))*.txt文件中的单词以逗号隔开
String fileEndRex=")";//(.txt文件的正则表达式
fr.findFiles(base,fileEndRex, aList);
HashMap<String,Integer> hMap=fr.count(aList);
Set<String> hset=hMap.keySet();
for (Iterator<String> iterator = hset.iterator(); iterator.hasNext();) {
String word = (String) iterator.next();
System.out.println("word:"+word+" "+hMap.get(word));
}
}
}
//CountWord.java
package com.xie.tencent;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
/**
* 这个类用于统计某个单词在所有文件中出现的次数。
* @author centre
*
*/
public class CounterWord {
FileReader fr;
private HashMap<String, Integer> hMap=new HashMap<String, Integer>();;
public HashMap<String, Integer> gethMap() {
return hMap;
}
/**
* 这个构造方法用于持有对方引用
* @author centre
* @param f FileReader
*/
public CounterWord(FileReader f) {
fr=f;
}
/**
* 根据传入的文件路径,打开文件,同时分析其中的单词个数,
* 存放进一个HashMap
* @author centre
* @param path String 文件的绝对路径
* @return 返回值貌似没用,在需要时可以接收
*/
public boolean openFile(String path){
boolean b=true;
try {
FileInputStream fis=new FileInputStream(path);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
try {
String words=br.readLine();
while (words!=null) {
//System.out.println(words);
String[] word=words.split(",");
for (int i = 0; i < word.length; i++) {
addWordCount(word[i]);
}
words=br.readLine();
}
} catch (IOException e) {
System.out.println("文件读取异常。");
e.printStackTrace();
}
} catch (FileNotFoundException e) {
System.out.println("没有找到该文件:"+path);
b=false;
e.printStackTrace();
}
return b;
}
/**
* 将单词放进map,同时统计单词出现的次数
* @param word String 单词
*/
private void addWordCount(String word) {
if (hMap.containsKey(word)) {
hMap.put(word, hMap.get(word).intValue()+1);
}else {
hMap.put(word, 1);
}
}
}
相关文章推荐
- 文件夹下有子文件夹又有.txt,子文件夹又有子文件夹又有.txt和子文件夹,把txt文件上面的单词全打出来并统计相同单词出现次数
- java 读取键盘输入到txt文件,统计每个单词出现的次数并输出
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key
- Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集
- scala统计一个文件夹下面所有文件的单词出现的总次数
- Hadoop 统计文件中单词出现的次数
- java读取txt文件,并统计每行中每个字母出现的次数,并将产生的数字保存到一个新的txt文件中(有加分)
- 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出例如: a: 21 次 b: 15 次 c:: 15 次 把: 7 次 当: 9 次 前: 3 次
- 面试题 统计文件中出现的单词及单词所在的行(C++ STL实现)
- 统计文件中各单词出现的频率(二叉排序树实现)
- 统计文件中每个单词的出现次数
- 读取一个.txt文件并计数每个单词出现的次数
- Python 练习册 4-统计文本文件中单词出现的个数
- 统计文件中出现次数最多的前10个单词
- 读取txt文件统计文章里"java"字符串出现的次数
- 统计文件中各单词出现的频率(Hash表实现)
- linux 统计文件中单词出现次数
- [java] 遍历输出D盘文件夹中以a开头的txt文件,并且统计个数
- sort +awk+uniq 统计文件中出现次数最多的前10个单词