WordCount

---恢复内容开始---

 

合作者:    201631062631 ;  201631062431      

代码地址:https://gitee.com/ZzGgJj/WordCountT

本次作业的链接地址:https://edu.cnblogs.com/campus/xnsy/Test/homework/2203

2.1.1 基本功能

wc.exe -c file.c     //返回文件 file.c 的字符数

wc.exe -w file.c     //返回文件 file.c 的单词总数

wc.exe -l file.c     //返回文件 file.c 的总行数

wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

 

2.1.2 扩展功能(未完成)

wc.exe -s            //递归处理目录下符合条件的文件

wc.exe -a file.c     //返回更复杂的数据(代码行 / 空行 / 注释行)

wc.exe -e stopList.txt  // 停用词表,统计文件单词总数时,不统计该表中的单词

[file_name]: 文件或目录名,可以处理一般通配符。

代码

主函数

package workCount;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.MalformedInputException;
import java.util.ArrayList;
import java.util.List;

import org.omg.CORBA.PUBLIC_MEMBER;

public class cMain {
	static String filepath="G:/eclipse/workCount/result.txt";//设置初始的文件输出路径,有-o命令就对其更改
	static String stopfile=null;//停词表
	static List comonds=new ArrayList<>();//创建list存储命令,即-c,-o等选项
	static List filenames=new ArrayList<>();//创建list存储文件的路径
	public static void main(String[] args) throws IOException
	{
		for(int i=0;i 
 

  统计单词数

	public String count_word(String filename) throws IOException{//统计单词数
		//int wordnum=0;//单词数
		File file =new File(filename);
		int x=-1;
		FileReader fReader=new FileReader(file);
		while((x=fReader.read())!=-1){//按字符读文件,碰到符合条件的,单词数+1
			char a=(char)x;
			if(a==' '||a==','||a=='.'){
				wordnum++;
			}
		}
		String result=filename+",单词数:"+wordnum;//保存结果
		fReader.close();//关闭流
		return result;//返回结果
	}

  统计字符数

public String count_char(String filename) throws IOException{//统计字符数
		int charnum=0;//字符数
		File file=new File(filename);
		int x=-1;
		FileReader fReader=new FileReader(file);
		while((x=fReader.read())!=-1){//按字符读文件,判断,符合则字符加一
			char a=(char)x;
			if(a!='\n'&&a!='\r'){
				charnum++;
			}
		}
		String result=filename+",字符数:"+charnum;//保存结果
		fReader.close();//关闭流
		return result;//返回结果
	}

  统计行数

public String count_line(String filename) throws IOException{//统计行数
		int line=0;//行数
		File file=new File(filename); 
		BufferedReader bReader;//缓冲区
		bReader=new BufferedReader(new FileReader(file));
			while(bReader.readLine()!=null){//对文件进行以行为单位读取,不为空则行数加一
				line++;
			}
			bReader.close();//关闭流
		String result=filename+",总行数:"+line;//保存结果
		return result;//返回结果
	}

  查询代码行 / 空行 / 注释行)

	public String count_moreLine(String filename) throws IOException// 返回各种行数
	{
		int noteLine=0;
		// 注释行
		int emptyLine=0;
		// 空行
		int codeLine=0;
		// 代码行
		int sumLine=0;
		int tag=0;
		// 设置标记,记录多行注释时的注释代码行数
		File file=new File(filename);
		BufferedReader bReader=new BufferedReader(new FileReader(file));
		String s;
		while((s=bReader.readLine())!=null){
			sumLine++;
			if(s.isEmpty()||s.startsWith("{")&&s.endsWith("{")||s.startsWith("}")&&s.endsWith("}")){
				// 对空行的判断
				emptyLine++;
			}
			if(tag==0){
				if(s.contains("//")){
					// 判断注释符
					noteLine++;
				}else if(s.contains("/*")){
					noteLine++;
					tag=1;
				}
				
			}else {
				noteLine++;
				if(s.contains("*/")){
					//判断下一行是否有下一个注释符
				 tag=0;
				}
			}
		}
		bReader.close();
		codeLine=sumLine-emptyLine-noteLine;
		String result=filename+",注释行:"+noteLine+",空行数:"+emptyLine+",代码行:"+codeLine;
		return result;
	}

  递归处理目录下符合条件的文件

public String recursiveFindFile(String filepath) throws IOException//递归
	{
	
		String result=null;
		File file=new File(filepath);
		if(file.isDirectory()){
			File[] files=file.listFiles();
			if(files.length==0)
			{
				System.out.println("空目录");
			}else{
				for(File f : files)
				{
					if(f.isDirectory())
						// 判断是否为目录
					{
						recursiveFindFile(f.getPath());
					}else if(f.isFile()) {
						// 判断是否为文件
						 		result+="\n文件名:"+f.getPath()+"\n"+count_word(f.getPath())+
								"\n"+count_line(f.getPath())+
								"\n"+count_char(f.getPath())+
								"\n"+count_moreLine(f.getPath());
					}
				}
			}
		}else if(file.isFile()){
			// 判断是否直接就为文件
			result="文件名:"+filepath+"\n"+count_word(filepath)+
					"\n"+count_line(filepath)+
					"\n"+count_char(filepath)+
					"\n"+count_moreLine(filepath);
		}
		return result;
	}

  测试

WordCount_第1张图片

 

 

WordCount_第2张图片

 WordCount_第3张图片

 

WordCount_第4张图片

 

 WordCount_第5张图片

 

 

 总结

本次项目采用了Java,实现了Wordcount的基本功能,但在一些非法操作符输入时,并不能正确处理。在需求分析以及结构设计方面仍存在较大问题,不清晰,不明确,严重影响项目开发的进度,同时编程能力不足也是一个因素,思路不清晰,对Java的理解流于表面,实践 能力较弱,导致事倍功半,但对项目开发流程有了深刻认识,为以后的学习提供了帮助。

---恢复内容结束---

你可能感兴趣的:(WordCount)