练习:【三国游戏文件信息读取分类、键盘录入学生信息写入文件、 GBK与UTF-8文件内容互相转换】
三国游戏文件信息读取分类
-
txt文件信息 1 阿会喃 云南 男 190 225 74 2 伊籍 江陵 男 162 226 24 3 尹赏 天水 男 194 260 44 4 尹默 梓潼 男 183 239 15 5 于禁 陈留 男 159 221 78 6 卫瓘 晋阳 男 220 291 46 7 袁胤 汝南 男 163 199 14 8 袁熙 汝南 男 176 207 51 9 阎行 长安 男 159 222 84 ..... ..... 470 樊氏 桂阳 女 176 215 22 471 糜氏 下邳 女 176 208 6 472 卞氏 许昌 女 160 230 24 473 步练师 楚河 女 185 238 10 474 刘氏 洛阳 女 164 205 8
-
需求
+武力值排名前三的值是多少 +求武力值最高3人名字 +统计各个地区的武将 +统计各个年龄段的武将 比如:10~19岁,20~29岁,30~39岁 40~49岁 50~59岁 60岁以上 +统计各个年龄段的武将男女比例 +统计平均年龄 +统计平均年龄最高的地区
-
代码
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.*; public class DuQu { public static void main(String[] args) { BufferedReader du = null; ArrayList<WuJiang> jiang = new ArrayList<>(); tianJia(jiang); threeTj(jiang); TreeMap<String, Integer> part = partTJ(jiang); partAge(jiang, part); ageFenBuBiLi(jiang); } private static void tianJia(ArrayList<WuJiang> jiang) { BufferedReader du; try { du = new BufferedReader(new FileReader("output.txt")); String hang = null; if (true) { try { while (((hang = du.readLine()) != null)) { String[] s = hang.split("[\\s]+"); WuJiang wuJiang = new WuJiang(); wuJiang.setNum(Integer.parseInt(s[0])); wuJiang.setName(s[1]); wuJiang.setPart(s[2]); wuJiang.setSex(s[3]); wuJiang.setBirthday(Integer.parseInt(s[4])); wuJiang.setDied(Integer.parseInt(s[5])); wuJiang.setPower(Integer.parseInt(s[6])); jiang.add(wuJiang); } } catch (IOException e) { e.printStackTrace(); } } } catch (FileNotFoundException e) { e.printStackTrace(); } } private static void threeTj(ArrayList<WuJiang> jiang) { //武力值排名前三人物:武力值及其名字 TreeMap<Integer, String> three = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); for (WuJiang j : jiang) { three.put(j.getPower(), j.getName()); } Set<Map.Entry<Integer, String>> entries = three.entrySet(); int c = 0; System.out.println("【武力值前三的人是:【姓名+武力值】】"); System.out.print("【"); for (Map.Entry<Integer, String> entry : entries) { System.out.print(entry.getValue() + ":" + entry.getKey() + " | "); c++; if (c == 3) { break; } } System.out.print("】"); System.out.println(); System.out.println("======================================================================================================================================="); } private static TreeMap<String, Integer> partTJ(ArrayList<WuJiang> jiang) { //统计各个地区的武将 TreeMap<String, Integer> part = new TreeMap<>(); for (WuJiang j : jiang) { if (!part.containsKey(j.getPart())) { int d = 1; part.put(j.getPart(), d); } else { int m = part.get(j.getPart()); part.put(j.getPart(), m + 1); } } Set<Map.Entry<String, Integer>> entries1 = part.entrySet(); int m = 0; System.out.println("【武力地域分布统计的人是:【地区+人数】】"); System.out.print("【"); for (Map.Entry<String, Integer> partstr : entries1) { m = m + part.get(partstr.getKey()); System.out.print(partstr.getKey() + ":" + part.get(partstr.getKey()) + " | "); } System.out.print("【总计统计人数为:" + m + "】"); System.out.print("】"); System.out.println(); System.out.println("======================================================================================================================================="); return part; } private static void partAge(ArrayList<WuJiang> jiang, TreeMap<String, Integer> part) { //统计平均年龄及其平均年龄最高的地区 TreeMap<String, Integer> old = new TreeMap<>(); for (WuJiang j : jiang) { if (!old.containsKey(j.getPart())) { old.put(j.getPart(), (j.getDied() - j.getBirthday())); } else { int r = old.get(j.getPart()); old.put(j.getPart(), (r + j.getDied() - j.getBirthday())); } } Set<Map.Entry<String, Integer>> entr = old.entrySet(); System.out.println("【地域平均年龄分布统计的人是:【地区+年龄】】"); System.out.print("【"); int max = 0; String pa = ""; for (Map.Entry<String, Integer> par : entr) { int mm = part.get(par.getKey()); if (max < (old.get(par.getKey()) / mm)) { max = (old.get(par.getKey()) / mm); } System.out.print(par.getKey() + ":" + (old.get(par.getKey()) / mm) + " | "); if (old.get(par.getKey()) == max) { pa = par.getKey(); } } System.out.print("{平均年龄最高地区为:" + pa + "\t" + "最高平均年龄为:" + max + "}"); System.out.print("】"); System.out.println(); System.out.println("======================================================================================================================================="); } private static void ageFenBuBiLi(ArrayList<WuJiang> jiang) { //统计各个年龄段的武将及各个年龄段的武将男女比例 TreeMap<String, String> iix = new TreeMap<>(); for (WuJiang wuJiang : jiang) { iix.put(wuJiang.getName(), wuJiang.getSex()); } TreeMap<String, Integer> ii = new TreeMap<>(); for (WuJiang wuJiang : jiang) { ii.put(wuJiang.getName(), wuJiang.getDied() - wuJiang.getBirthday()); } int z1 = 0; int z2 = 0; int z3 = 0; int z4 = 0; int z5 = 0; int z6 = 0; int z7 = 0; int z8 = 0; int x1 = 0; int x2 = 0; int x3 = 0; int x4 = 0; int x5 = 0; int x6 = 0; int x7 = 0; int x8 = 0; int x9 = 0; int x77 = 0; int sum = 0; Set<Map.Entry<String, Integer>> iii = ii.entrySet(); for (Map.Entry<String, Integer> nial : iii) { sum += nial.getValue(); if (nial.getValue() >= 10 && nial.getValue() <= 19) { z1++; if (iix.get(nial.getKey()).equals("男")) { z7++; } else { z8++; } } else if (nial.getValue() >= 20 && nial.getValue() <= 29) { z2++; if (iix.get(nial.getKey()).equals("男")) { x1++; } else { x2++; } } else if (nial.getValue() >= 30 && nial.getValue() <= 39) { z3++; if (iix.get(nial.getKey()).equals("男")) { x3++; } else { x4++; } } else if (nial.getValue() >= 40 && nial.getValue() <= 49) { z4++; if (iix.get(nial.getKey()).equals("男")) { x5++; } else { x6++; } } else if (nial.getValue() >= 50 && nial.getValue() <= 59) { z5++; if (iix.get(nial.getKey()).equals("男")) { x7++; } else { x8++; } } else { z6++; if (iix.get(nial.getKey()).equals("男")) { x9++; } else { x77++; } } } System.out.println("【年龄统计:【年龄段+人数】】"); System.out.println("【年龄为10-19的人数为:" + z1 + " | 其中男性武将有:" + z7 + "人 | 女性武将有:" + z8 + "人 | 男女比例为:" + z7 + ":" + z8 + " 】"); System.out.println("【年龄为20-29的人数为:" + z2 + " | 其中男性武将有:" + x1 + "人 | 女性武将有:" + x2 + "人 | 男女比例为:" + x1 + ":" + x2 + " 】"); System.out.println("【年龄为30-39的人数为:" + z3 + " | 其中男性武将有:" + x3 + "人 | 女性武将有:" + x4 + "人 | 男女比例为:" + x3 + ":" + x4 + " 】"); System.out.println("【年龄为40-49的人数为:" + z4 + " | 其中男性武将有:" + x5 + "人 | 女性武将有:" + x6 + "人 | 男女比例为:" + x5 + ":" + x6 + " 】"); System.out.println("【年龄为50-59的人数为:" + z5 + " | 其中男性武将有:" + x7 + "人 | 女性武将有:" + x8 + "人 | 男女比例为:" + x7 + ":" + x8 + " 】"); System.out.println("【年龄大于60的人数为:" + z6 + " | 其中男性武将有:" + x9 + "人 | 女性武将有:" + x77 + "人 | 男女比例为:" + x9 + ":" + x77 + " 】"); System.out.println("【平均年龄为:" + (sum / 474) + "】"); System.out.println("======================================================================================================================================="); } } class WuJiang { private int num; private String name; private String part; private String sex; private int birthday; private int died; private int power; public WuJiang() { } public WuJiang(int num, String name, String part, String sex, int birthday, int died, int power) { this.num = num; this.name = name; this.part = part; this.sex = sex; this.birthday = birthday; this.died = died; this.power = power; } public void setNum(int num) { this.num = num; } public void setName(String name) { this.name = name; } public void setPart(String part) { this.part = part; } public void setSex(String sex) { this.sex = sex; } public void setBirthday(int birthday) { this.birthday = birthday; } public void setDied(int died) { this.died = died; } public void setPower(int power) { this.power = power; } public int getNum() { return num; } public String getName() { return name; } public String getPart() { return part; } public String getSex() { return sex; } public int getBirthday() { return birthday; } public int getDied() { return died; } public int getPower() { return power; } @Override public String toString() { return "WuJiang{" + "num=" + num + ", name='" + name + '\'' + ", part='" + part + '\'' + ", sex=" + sex + ", birthday=" + birthday + ", died=" + died + ", power=" + power + '}'; } }
-
运行结果
【武力值前三的人是:【姓名+武力值】】 【吕布:100 | 张飞:98 | 马超:97 | 】 ======================================================================================================================================= 【武力地域分布统计的人是:【地区+人数】】 【上庸:2 | 下邳:16 | 云南:17 | 会稽:8 | 北平:15 | 北海:5 | 南皮:13 | 吉林:1 | 吴:10 | 天水:17 | 宛:14 | 寿春:5 | 小沛:6 | 平原:5 | 庐江:13 | 建业:21 | 成都:21 | 新野:4 | 晋阳:15 | 柴桑:11 | 桂阳:6 | 梓潼:10 | 楚河:1 | 武陵:7 | 汉中:7 | 汝南:8 | 江夏:10 | 江州:12 | 江陵:17 | 洛阳:30 | 湖南:1 | 濮阳:20 | 蒙古:1 | 蓟:4 | 襄平:7 | 襄阳:16 | 西凉:4 | 许昌:19 | 邺:22 | 长安:14 | 长沙:6 | 陈留:26 | 零陵:7 | 【总计统计人数为:474】】 ======================================================================================================================================= 【地域平均年龄分布统计的人是:【地区+年龄】】 【上庸:64 | 下邳:46 | 云南:46 | 会稽:54 | 北平:43 | 北海:47 | 南皮:46 | 吉林:70 | 吴:47 | 天水:48 | 宛:46 | 寿春:55 | 小沛:45 | 平原:51 | 庐江:50 | 建业:51 | 成都:58 | 新野:49 | 晋阳:46 | 柴桑:51 | 桂阳:46 | 梓潼:54 | 楚河:53 | 武陵:57 | 汉中:52 | 汝南:44 | 江夏:52 | 江州:52 | 江陵:46 | 洛阳:53 | 湖南:46 | 濮阳:47 | 蒙古:30 | 蓟:54 | 襄平:46 | 襄阳:51 | 西凉:48 | 许昌:46 | 邺:51 | 长安:52 | 长沙:50 | 陈留:51 | 零陵:49 | {平均年龄最高地区为:吉林 最高平均年龄为:70}】 ======================================================================================================================================= 【年龄统计:【年龄段+人数】】 【年龄为10-19的人数为:2 | 其中男性武将有:2人 | 女性武将有:0人 | 男女比例为:2:0 】 【年龄为20-29的人数为:11 | 其中男性武将有:9人 | 女性武将有:2人 | 男女比例为:9:2 】 【年龄为30-39的人数为:104 | 其中男性武将有:95人 | 女性武将有:9人 | 男女比例为:95:9 】 【年龄为40-49的人数为:136 | 其中男性武将有:129人 | 女性武将有:7人 | 男女比例为:129:7 】 【年龄为50-59的人数为:97 | 其中男性武将有:89人 | 女性武将有:8人 | 男女比例为:89:8 】 【年龄大于60的人数为:124 | 其中男性武将有:119人 | 女性武将有:5人 | 男女比例为:119:5 】 【平均年龄为:50】 ======================================================================================================================================= Process finished with exit code 0
键盘录入学生信息写入文件
-
问题
键盘录入学生信息(姓名,语文成绩(chineseScore),数学成绩(mathScore),英语成绩(englishScore)),按照总分从高到低存入文本文件 - 分析: - a: 创建一个学生类: 姓名,语文成绩(chineseScore),数学成绩(mathScore),英语成绩(englishScore) - b: 因为要排序,所以需要选择TreeSet进行存储学生对象 - c: 键盘录入学生信息,把学生信息封装成一个学生对象,在把学生对象添加到集合中 - d: 创建一个高效的字符输出流对象 - e: 遍历集合,把学生的信息写入到指定的文本文件中 - f: 释放资源
-
代码
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.Comparator; import java.util.Scanner; import java.util.TreeSet; public class XueSheng { public static void main(String[] args) { TreeSet<Student> dd = new TreeSet<>(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { double sum1 = o1.getChinese() + o1.getEnglish() + o1.getMath(); double sum2 = o2.getChinese() + o2.getEnglish() + o2.getMath(); return (int) (sum2 - sum1); } }); BufferedWriter bb = null; try { bb = new BufferedWriter(new FileWriter("stud.txt")); } catch (IOException e) { e.printStackTrace(); } ShuRu(dd); System.out.println(dd); int i = 1; System.out.println("排名" + "\t" + "总分" + "\t\t" + "姓名" + "\t\t" + "语文" + "\t\t" + "数学" + "\t\t" + "英语"); for (Student sss : dd) { System.out.print(i + "\t"); String s = i + "\t" + (sss.getChinese() + sss.getEnglish() + sss.getMath()) + "\t\t" + sss.getName() + "\t" + sss.getChinese() + "\t" + sss.getMath() + "\t" + sss.getEnglish(); i++; try { assert bb != null; bb.write(s); bb.flush(); } catch (IOException e) { e.printStackTrace(); } System.out.println(sss); } try { bb.close(); } catch (IOException e) { e.printStackTrace(); } } private static void ShuRu(TreeSet<Student> dd) { int m = 1; while (m == 1) { Scanner ss = new Scanner(System.in); System.out.println("请输入学生姓名:"); Student s = new Student(); s.setName(ss.nextLine()); System.out.println("请输入学生成绩:"); System.out.print("语文:"); s.setChinese(ss.nextDouble()); System.out.print("数学:"); s.setMath(ss.nextDouble()); System.out.print("英语:"); s.setEnglish(ss.nextDouble()); System.out.println(); dd.add(s); System.out.println("结束请输入0 继续请输入1"); m = ss.nextInt(); } } } class Student { private String name; private double chinese; private double math; private double English; public Student() { } public Student(String name, double chinese, double math, double english) { this.name = name; this.chinese = chinese; this.math = math; English = english; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getChinese() { return chinese; } public void setChinese(double chinese) { this.chinese = chinese; } public double getMath() { return math; } public void setMath(double math) { this.math = math; } public double getEnglish() { return English; } public void setEnglish(double english) { English = english; } @Override public String toString() { return (this.math + this.chinese + this.English) + "\t" + name + "\t\t" + chinese + "\t" + math + "\t" + English ; } }
-
程序运行结果
请输入学生姓名:
kk
请输入学生成绩:
语文:45
数学:45
英语:78
结束请输入0 继续请输入1
1
请输入学生姓名:
ll
请输入学生成绩:
语文:78
数学:89
英语:56
结束请输入0 继续请输入1
1
请输入学生姓名:
oo
请输入学生成绩:
语文:32
数学:12
英语:10
结束请输入0 继续请输入1
1
请输入学生姓名:
ji
请输入学生成绩:
语文:45
数学:12
英语:16
结束请输入0 继续请输入1
1
请输入学生姓名:
hu
请输入学生成绩:
语文:78
数学:95
英语:96
结束请输入0 继续请输入1
1
请输入学生姓名:
koi
请输入学生成绩:
语文:23
数学:13
英语:10
结束请输入0 继续请输入1
1
请输入学生姓名:
dr
请输入学生成绩:
语文:84
数学:86
英语:82
结束请输入0 继续请输入1
0
[269.0 hu 78.0 95.0 96.0, 252.0 dr 84.0 86.0 82.0, 223.0 ll 78.0 89.0 56.0, 168.0 kk 45.0 45.0 78.0, 73.0 ji 45.0 12.0 16.0, 54.0 oo 32.0 12.0 10.0, 46.0 koi 23.0 13.0 10.0]
1 269.0 hu 78.0 95.0 96.0
2 252.0 dr 84.0 86.0 82.0
3 223.0 ll 78.0 89.0 56.0
4 168.0 kk 45.0 45.0 78.0
5 73.0 ji 45.0 12.0 16.0
6 54.0 oo 32.0 12.0 10.0
7 46.0 koi 23.0 13.0 10.0
Process finished with exit code 0
请输入学生姓名:
gt
请输入学生成绩:
语文:78
数学:12
英语:46
结束请输入0 继续请输入1
1
请输入学生姓名:
hy
请输入学生成绩:
语文:89
数学:45
英语:65
结束请输入0 继续请输入1
1
请输入学生姓名:
we
请输入学生成绩:
语文:12
数学:45
英语:78
结束请输入0 继续请输入1
0
[199.0 hy 89.0 45.0 65.0, 136.0 gt 78.0 12.0 46.0, 135.0 we 12.0 45.0 78.0]
1 199.0 hy 89.0 45.0 65.0
2 136.0 gt 78.0 12.0 46.0
3 135.0 we 12.0 45.0 78.0
Process finished with exit code 0
+ TXT文件写入结果
排名 总分 姓名 语文 数学 英语
1 269.0 hu 78.0 95.0 96.0
2 252.0 dr 84.0 86.0 82.0
3 223.0 ll 78.0 89.0 56.0
4 168.0 kk 45.0 45.0 78.0
5 73.0 ji 45.0 12.0 16.0
6 54.0 oo 32.0 12.0 10.0
7 46.0 koi 23.0 13.0 10.0
排名 总分 姓名 语文 数学 英语
1 168.0 ff 45.0 45.0 78.0
排名 总分 姓名 语文 数学 英语
1 135.0 fd 78.0 45.0 12.0
排名 总分 姓名 语文 数学 英语
1 199.0 hy 89.0 45.0 65.0
2 136.0 gt 78.0 12.0 46.0
3 135.0 we 12.0 45.0 78.0
### 文件编码转换
+ 需求
给了一个文本文件是GBK编码。你把这个文件中的4句,复制到另外一个文本文件,这个文件的编码是UTF-8
+ 原文件内容
��ǰ���¹�
���ǵ���˪
��ͷ������
��ͷ˼����
+ 代码
import java.io.*;
import java.util.LinkedList;
public class Shi {
public static void main(String[] args) {
InputStreamReader du = null;
OutputStreamWriter xie = null;
BufferedReader du1 = null;
BufferedWriter xie1 = null;
try {
try {
du = new InputStreamReader(new FileInputStream(“shi.txt”), “GBK”);
xie = new OutputStreamWriter(new FileOutputStream(“sh.txt”), “UTF-8”);
int len = 0;
while ((len = du.read()) != -1) {
xie.write(len);
}
System.out.println(“转换成功”);
du.close();
xie.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
+ 程序运行结果
转换成功
Process finished with exit code 0
+ 文件写入结果
床前明月光
疑是地上霜
举头望明月
低头思故乡
# over