java实现点名,并记录被点次数
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.Scanner; public class Demoe1 { public static void main(String[] args)throws Exception { File f=new File("src/t7/names.txt"); //用于存放读取进来的学生姓名 ArrayList<String> nameList=new ArrayList<String>(); //定义用于读取文件的输入流 Scanner cin=new Scanner(new FileInputStream(f)); cin.useDelimiter(" "); //读取学生姓名到集合中 while(cin.hasNext()){ nameList.add(cin.next()); } cin.close();//关闭输入流 f.delete();//删除原有的文本文件 //用于存储处理后的学生姓名 ArrayList<String> resultList=new ArrayList<String>(); for(String s:nameList){ //用于去掉回车换行 s=s.substring(0,s.length()-1); //把处理后的学生姓名加来新的容器中 resultList.add(s+" "+0); } //定义文件输出流 PrintStream ps=new PrintStream(new FileOutputStream(f)); //把处理之后的学生姓名写到文本文件中 for(String s:resultList) ps.println(s); ps.close();//关闭输出流 } }
学生姓名和时间
public class Student { private String name; private int time; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } }
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class RollCall { public static void main(String[] args) throws Exception { File f = new File("src/t8/names.txt"); Scanner cin = new Scanner(new FileInputStream(f)); cin.useDelimiter(" "); // 用于存储学生姓名和被点次数 ArrayList<Student> sList = new ArrayList<Student>(); while (cin.hasNext()) { String s = cin.next(); // 用空格把学生姓名和次数他隔开 String[] ss = s.split("\s+");// 正则 Student stu = new Student(); stu.setName(ss[0]); // 把字符串类型的次数转换成int类型的次数 // 并存入Student类的对象中 stu.setTime(Integer.parseInt(ss[1])); sList.add(stu); } cin.close(); f.delete(); // 产生随机下标 Random r = new Random(); // 下标的上界为数组的长度 int i = r.nextInt(sList.size()); Student student = sList.get(i); System.out.println(student.getName()); // 被点过名的学生,点名次数加1 sList.get(i).setTime(student.getTime() + 1); writeStudent(f,sList); } public static void writeStudent(File f, ArrayList<Student> sList)throws Exception { // 建立文件输出流 PrintStream ps = new PrintStream(new FileOutputStream(f)); for (Student s : sList) { // 把学生姓名和被点次数拼成字符串 String st = s.getName() + " " + s.getTime(); // 把学生信息输出到文本文件中 ps.println(st); } ps.close(); } }