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