122
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 福州大学-2302软件工程 |
|---|---|
| 这个作业要求在哪里 | 软件工程第二次作业--文件读取 |
| 这个作业的目标 | 掌握文件读取、JSON解析、单元测试 |
| 其他参考文献 | 源代码管理,《Git入门》,软件工程师的能力评估和职业发展... |
| PSP阶段 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 20 |
| • Estimate | - 估计这个任务需要多少时间 | 20 | 20 |
| Development | 开发 | 710 | 890 |
| • Analysis | - 需求分析(包括学习新技术) | 120 | 150 |
| • Design Spec | - 生成设计文档 | 20 | 20 |
| • Design Review | - 设计复审 | 30 | 30 |
| • Coding Standard | - 代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
| • Design | - 具体设计 | 40 | 60 |
| • Coding | - 具体编码 | 360 | 450 |
| • Code Review | - 代码复审 | 60 | 90 |
| • Test | - 测试(自我测试,修改代码,提交修改) | 60 | 90 |
| Reporting | 报告 | 80 | 140 |
| • Test Report | - 测试报告 | 40 | 100 |
| • Size Measurement | - 计算工作量 | 20 | 20 |
| • Postmortem & Process Improvement Plan | - 事后总结, 并提出过程改进计划 | 20 | 20 |
| 合计 | 810 | 1050 |
解析athletes.json

分别为国籍,性别,姓名
解析event.json

分别为比赛名,详细信息id路径

分别为总成绩,单轮,排名,姓名
文件处理和读取命令的实现
File filename = new File(inputFile); // 读取以上路径的input.txt
InputStreamReader reader = new InputStreamReader(
new FileInputStream(filename)); // 输入流对象reader
BufferedReader br = new BufferedReader(reader);
String line = "";
line = br.readLine();
/* 写入Txt文件 */
File writename = new File(outputFile);
writename.createNewFile(); // 创建新output文件!!!!!!!!!!!!!!!!!!!!!
BufferedWriter out = new BufferedWriter(new FileWriter(writename));
while (line != null) {
System.out.println(line);
String[] command = line.split("\\s");
if (!command[0].equals("result") && !command[0].equals("players")) {
try {
//错误指令
out.write("Error\r\n");
out.write("-----\r\n");
out.flush(); // 缓存区内容压入文件
}
catch (Exception e) {
System.out.println("写入错误!!!");
}
}
else if (command[0].equals("players")) {
PlayerOUT playerOUT = new PlayerOUT(line,outputFile);
playerOUT.playerWrite();
//System.out.println("\n比赛选手....\n");
}
else if (command[0].equals("result")) {
MatchOUT matchOUT = new MatchOUT(line,outputFile);
matchOUT.matchWrite();
//System.out.println("\n比赛结果....\n");
}
line = br.readLine(); // 一次读入一行
}
out.close(); // 关闭文件
JSON文件转成字符串的实现
private String jsonTostring(String js) {
String json = "";
Path path = Paths.get(js);
try {
// 使用 Files 类的 readAllBytes 方法,将文件的所有字节读取到一个 byte 数组中
byte[] bytes = Files.readAllBytes(path);
// 使用 Charset 类的 forName 方法,指定字符编码为 UTF-8,并将 byte 数组转换为字符串
json = new String(bytes, Charset.forName("UTF-8"));
//System.out.println(json);
}
catch (IOException e) {
// 处理异常
e.printStackTrace();
}
// 返回输出字符串
return json;
}
比赛详细信息输出的实现
File writename = new File(ouputFile);
//writename.createNewFile(); // 创建新文件
BufferedWriter out = new BufferedWriter(new FileWriter(writename,true));//不覆写
if (!isFound()) {
out.write("N/A" + "\n");
out.write("-----" + "\n");
System.out.println("没找到。。。!!!!!!!!!!!!!!!!!!!!!!!!!");
}
else {
String id = getID();
String json = jsonTostring("src/datas/results/" + id + ".json");;
//System.out.println("src/datas/results/" + id + ".json");
JSONObject jsonObject = JSON.parseObject(json);
JSONArray Heats=jsonObject.getJSONArray("Heats");
JSONObject jsonObject1=Heats.getJSONObject(0);
JSONArray Results=jsonObject1.getJSONArray("Results");
for (int i = 0; i < Results.size(); i++) {
String scoreString = "";
JSONObject res = Results.getJSONObject(i);
String fullname = res.get("FullName").toString();
String rank = res.get("Rank").toString();
String totalpoints = res.get("TotalPoints").toString();
JSONArray dives=res.getJSONArray("Dives");
//分数加法式拼接
for (int j = 0; j < dives.size()-1; j++) {
JSONObject scores=dives.getJSONObject(j);
String score= scores.get("DivePoints").toString();
scoreString = scoreString+score+" + ";
}
JSONObject scores=dives.getJSONObject(dives.size()-1);
String score= scores.get("DivePoints").toString();
scoreString = scoreString+score;
out.write("Full Name:"+fullname.replace("/","&")+"\n");//双人项目,选手姓名格式命名为'A & B'
out.write("Rank:"+rank+"\n");
out.write("Score:"+scoreString+" = "+totalpoints+"\n");
out.write("-----"+"\n");
out.flush(); // 缓存区内容压入文件
}
//out.write("-----" + "\n");
System.out.println("找到。。。!!!!!!!!!!!!!!!!!!!!!!!!!");
}
out.close(); // 关闭文件
比赛命令判断时,查找太慢。
处理:使用list储存命令,快速查找判断。

使用junit4测试了正常输出,与错误输出:


文件读取写入异常处理:


在此次作业中,我学会了使用JAVA库来读取和解析JSON文件,了解了Java处理json文件的转化与储存输出,更加熟悉了文件的读取写入。此外,我还学会了过去编程时没有接触过的依赖的引入、单元测试的使用,在网上的学习和请教下,终于实现了功能。通过不断的实践和学习,我的编程能力得到了提升,而且更加熟悉了实际编程活动中,使用git管理项目和git提交流程与做法。