某目录下包含若干个文本文件,请依次输出每个文本文件所包含的英文字符,数字字符以及 其它字符的数量。

/*

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();
	}
	
}


猜你喜欢

转载自blog.csdn.net/u012279312/article/details/22798355