/*
其它字符的数量。
例子:
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(); } }