/*
例子:
c:\sub\charcount\a.txt
FileCharCounter.java
某目录下包含若干个文本文件,请依次输出每个文本文件所包含的英文字符,数字字符以及
其它字符的数量。例子:
c:\sub\charcount\a.txt
第1 行 英文字符:7 数字字符:6 其它字符:4 abcd123 5e89*((ll
第2 行 英文字符:12 数字字符:7 其它字符:1 jdkd83949jkdfjdkf91)
第3 行 英文字符:3 数字字符:3 其它字符:1 ab78)i9
Total: 英文字符:22 数字字符:16 其它字符:6
=======================================
c:\sub\charcount\b.txt
第1 行 英文字符:7 数字字符:6 其它字符:4 zzz123 5e8q9*((ll
第2 行 英文字符:7 数字字符:7 其它字符:3 83949jk$%fjdkf91)
第3 行 英文字符:3 数字字符:3 其它字符:1 ab78)i9
Total: 英文字符:17 数字字符:16 其它字符:8
======================================= ….
该结果输出到控制台并保存到文件result.txt
*/
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Scanner;
/**
* @author Calm
*
*/
public class FileCharCounter {
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args){
File file = new File("d:/");
int line = 1;
int countLetter = 0, countNumber = 0, countOther = 0;
int countLetterAll = 0, countNumberAll = 0, countOtherAll = 0;
String s = null;
Scanner output = null;
PrintWriter writer = null;
try {
writer=new PrintWriter(new FileOutputStream(new File("c:/result.txt"),true));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
//遍历指定目录下所有文件
for(File subfile : file.listFiles()){
//一个文件检测结束后,计数器清零
countLetterAll = 0;
countNumberAll = 0;
countOtherAll = 0;
if(subfile.isFile()){
try {
output = new Scanner(subfile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println(subfile.getAbsolutePath()); //打印当前文件绝对路径
writer.println(subfile.getAbsolutePath());
//当这个扫描器还有可读的数据时继续判断字符类型
while (output.hasNext()){
//一行检测结束后,计数器清零
countLetter = 0;
countNumber = 0;
countOther = 0;
s = output.nextLine();
//遍历整行字符
for(int j = 0; j < s.length(); j++){
if(Character.isLetter(s.charAt(j))){
countLetter++;
countLetterAll++;
}
else if(Character.isDigit(s.charAt(j))){
countNumber++;
countNumberAll++;
}
else{
countOther++;
countOtherAll++;
}
}
System.out.printf("第%d行\t英文字符: %d\t数字字符: %d\t其他字符: %d\t%s\n", line, countLetter,
countNumber, countOther, s);
writer.printf("第%d行\t英文字符: %d\t数字字符: %d\t其他字符: %d\t%s\r\n", line, countLetter,
countNumber, countOther, s);
line++;
}
System.out.printf("Total:\t英文字符: %d\t数字字符: %d\t其他字符: %d\t\n", countLetterAll, countNumberAll, countOtherAll);
writer.printf("Total:\t英文字符: %d\t数字字符: %d\t其他字符: %d\t\r\n", countLetterAll, countNumberAll, countOtherAll);
System.out.println("=======================================");
writer.println("=======================================");
line = 1; //当前文件检测结束时,行号置1,以备下个文件使用
output.close();
}
}
writer.flush();
writer.close();
}
}