一.Gitee地址:https://gitee.com/zjgss99/WordCount
二.项目分析:
对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
命令格式:
wc.exe [para] <filename> [para] <filename> ... -o <filename>
基础功能:
-c:统计文件中的字符数,不包括换行符;
-w:统计文件中的单词数;
-l:统计文件的行数;
-o:指定输出文件;
三.PSP表格:
PSP2.1 | PSP阶段 | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 15 | 10 |
· Estimate | · 估计这个任务需要多少时间 | 15 | 10 |
Development | 开发 | 400 | 660 |
· Analysis | · 需求分析(包括学习新技术) | 30 | 90 |
· Design Spec | · 生成设计文档 | 30 | 20 |
· Design Review | · 设计复审(和同事审核设计文档) | 10 | 20 |
· Coding Standard | · 代码规范(为目前的开发制定合适的规范) | 5 | 5 |
· Design | · 具体设计 | 30 | 15 |
· Coding | · 具体编码 | 240 | 450 |
· Code Review | · 代码复审 | 40 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 15 | 30 |
Reporting | 报告 | 65 | 35 |
· Test Report | · 测试报告 | 20 | 10 |
· Size Measurement | · 计算工作量 | 15 | 10 |
· Postmortem & Process improvement Plan | · 事后总结,并提出过程改进计划 | 30 | 15 |
合计 | 480 |
705 |
四.解题思路:
项目大致分为三个部分:
1)对用户输入的命令进行判断,读取文件,处理,传递参数给功能处理部分
2)对几种命令对应的功能分别进行实现,接收参数
3)根据命令将输出结果保存到相应的输出文件中
项目构成:
1)主函数:
读取文件,对用户输入的命令分别调用功能处理模块,并对一些异常情况做处理
2)功能处理模块:
对基本功能进行实现,通过主函数传递的参数确定需要输出的输出文件及输出文件需要的内容。
五.代码展示:
1)模块处理方法(通过主方法传递的参数确定输出内容)
import java.io.*; public class Handle { int line = 0;
int word = 0;
int charnum = 0; public void deal(String readPath,String writePath, String flag) {
boolean flagexist = true;
try {
String str = "";
String[] linenum;
File file = new File(readPath);
BufferedReader br = new BufferedReader(new FileReader(readPath));
try {
try {
while ((str = br.readLine()) != null) {
linenum = str.split(",| ");
for (int i = 0; i < linenum.length; i++) {
if (linenum[i] != null)
word++;
}
line++;
charnum += str.length();
}
System.out.println("行数:"+line+ " 单次数:" + word+" 字符数:"+ charnum);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
System.out.println("关闭BufferedReader错误");
}
}
} catch (FileNotFoundException e) {
flagexist = false;
System.out.println("未找到文件.");
}
if(!flagexist){ }
else{
String output = "";
switch (flag){
case "-o":
output = readPath+",字符数:"+charnum;
try{
File outputFile = new File(writePath);
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(output);
bw.flush();
bw.close();
}catch (IOException e)
{
e.printStackTrace();
}
break;
case "-w":
output = readPath+",单词数:"+word;
try{
File outputFile = new File(writePath);
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(output);
bw.flush();
bw.close();
}catch (IOException e)
{
e.printStackTrace();
}
break;
case "-l":
output = readPath+",行数:"+line;
try{
File outputFile = new File(writePath);
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(output);
bw.flush();
bw.close();
}catch (IOException e)
{
e.printStackTrace();
}
break;
case "-c":
output = readPath+",字符数:"+charnum;
try{
File outputFile = new File(writePath);
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(output);
bw.flush();
bw.close();
}catch (IOException e)
{
e.printStackTrace();
}
break;
}
}
}
}
2)主方法(对用户的输入命令进行处理并传递给功能处理模块)
import java.io.*; public class Main { public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String read = null;
System.out.println("请输入命令(格式:wc.exe [parameter] [input_file_name]):");
try{
String readPath = "file.c";
String writePath = "result.txt";
read = bf.readLine();
// System.out.println(read);
String [] getRead;
getRead = read.split(" ");
if(getRead.length == 3){
if(getRead[0].equals("wc.exe")){
if(getRead[1].equals("-o")){
if(getRead[2].endsWith(".txt")){
Handle handle = new Handle();
writePath = getRead[2];
handle.deal(readPath,writePath,"-o");
}
else {
System.out.println("命令格式输入错误");
}
}
else if(getRead[1].equals("-c")){
if(getRead[2].endsWith(".c")){
Handle handle = new Handle();
readPath = getRead[2];
handle.deal(readPath,writePath,"-c");
}
else {
System.out.println("命令格式输入错误");
}
}
else if(getRead[1].equals("-w")){
if(getRead[2].endsWith(".c")){
Handle handle = new Handle();
readPath = getRead[2];
handle.deal(readPath,writePath,"-w");
}
else {
System.out.println("命令格式输入错误");
}
}
else if(getRead[1].equals("-l")){
if(getRead[2].endsWith(".c")){
Handle handle = new Handle();
readPath = getRead[2];
handle.deal(readPath,writePath,"-l");
}
else {
System.out.println("命令格式输入错误");
}
}
else {
System.out.println("命令格式输入错误");
}
}
else{
System.out.println("可执行文件名输入错误");
}
}
else{
System.out.println("命令输入格式错误.");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
六.测试
正常按格式输入命令
错误的输入
七.参考文献:
java文件操作 https://www.cnblogs.com/xwlych/p/5987022.html
将jar包生成.exe文件 https://blog.csdn.net/u011752272/article/details/80697198