集合到文件
把ArrayList集合中的字符串数据写入到文本文件中,要求:每一个字符串元素作为文件中的一行数据
思路:
- 创建ArrayList集合
- 往集合中存储字符串元素
- 创建字符缓冲输出流对象
- 遍历集合,得到每一个字符串数据
- 调用字符缓冲输出流对象的方法写数据
- 释放资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package com.demo.chars;
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList;
public class ArrayListToTxtDemo { public static void main(String[] args) throws IOException { ArrayList<String> strings = new ArrayList<>(); strings.add("hello"); strings.add("world"); strings.add("java"); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("java-file-class/array.txt")); for (String string : strings) { bufferedWriter.write(string); bufferedWriter.newLine(); bufferedWriter.flush(); } bufferedWriter.close(); } }
|
集合到文件(改进版)
把ArrayList集合中的学生数据写入到文本文件中,要求:每一个学生对象的数据作为文件中的一行数据
举例:
- 格式:学生,学号,年龄,居住地
- 示例:stu001,张三,25,北京
思路:
- 定义学生类
- 创建ArrayList集合
- 创建学生对象
- 把学生对象添加到集合中
- 创建字符缓冲输出流对象
- 遍历集合,得到每一个学生对象
- 把学生对象的数据拼接成指定格式的字符串
- 调用字符缓冲输出流对象的方法写数据
- 释放资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package com.demo.chars;
import com.demo.model.Student;
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList;
public class ArrayListToTxtDemo02 { public static void main(String[] args) throws IOException { ArrayList<Student> students = new ArrayList<>(); Student student1 = new Student("stu001", "张三", 25, "北京"); Student student2 = new Student("stu002", "李四", 30, "武汉"); Student student3 = new Student("stu003", "王五", 20, "上海"); Student student4 = new Student("stu004", "赵六", 18, "成都"); students.add(student1); students.add(student2); students.add(student3); students.add(student4); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("java-file-class/students.txt")); for (Student student : students) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(student.getSid()).append(",") .append(student.getName()).append(",") .append(student.getAge()).append(",") .append(student.getAddress()); bufferedWriter.write(stringBuilder.toString()); bufferedWriter.newLine(); bufferedWriter.flush(); } bufferedWriter.close(); } }
|
集合到文件(数据排序改进版)
键盘录入5个学生信息(姓名,语文成绩,数据成绩,英语成绩)。要按照成绩总分从高到低写入文本文件中
格式:姓名,语文成绩,数据成绩,英语成绩
举例:张三,98.99.100
思路:
- 定义学生类
- 创建TreeSet集合,通过比较器排序进行排序
- 键盘录入数据
- 创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
- 把学生对象添加到TreeSet集合
- 创建字符缓冲输出流对象
- 遍历集合,得到每一个学生对象
- 把学生对象的数据拼接成指定格式的字符串
- 调用字符缓冲输出流对象的方法写数据
- 释放资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| package com.demo.chars;
import com.demo.model.StudentSource;
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 TreeSetToFileDemo { public static void main(String[] args) throws IOException { TreeSet<StudentSource> students = new TreeSet<>(new Comparator<StudentSource>() { @Override public int compare(StudentSource s1, StudentSource s2) { int num = s2.getSum() - s1.getSum(); int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num; int num3 = num2 == 0 ? s1.getMath() - s2.getMath() : num2; return num3 == 0 ? s1.getName().compareTo(s2.getName()) : num3; } }); for (int i = 0; i < 5; i++) { Scanner sc = new Scanner(System.in); System.out.println("请录入第:" + (i + 1) + "个学生的信息"); System.out.println("姓名:"); String name = sc.nextLine(); System.out.println("语文成绩:"); int chinese = sc.nextInt(); System.out.println("数学成绩:"); int math = sc.nextInt(); System.out.println("英语成绩:"); int english = sc.nextInt();
StudentSource studentSource = new StudentSource(); studentSource.setName(name); studentSource.setChinese(chinese); studentSource.setMath(math); studentSource.setEnglish(english);
students.add(studentSource); } BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("java-file-class/studentSource.txt")); for (StudentSource student : students) { String str = student.getName() + "," + student.getChinese() + "," + student.getMath() + "," + student.getEnglish() + "," + student.getSum(); bufferedWriter.write(str); bufferedWriter.newLine(); bufferedWriter.flush(); } bufferedWriter.close(); } }
|
文件到集合
把文本文件中的数据读取到集合中,并遍历集合,要求:文件中每一行数据是一个集合元素
思路:
- 创建字符缓冲输入流对象
- 创建ArrayList集合对象
- 调用字符缓冲输入流对象的方法读取数据
- 把读取到的字符串数据存储到集合中
- 释放资源
- 遍历集合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package com.demo.chars;
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList;
public class TxtToArrayListDemo { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new FileReader("java-file-class/array.txt")); ArrayList<String> strings = new ArrayList<>(); String line; while ((line = bufferedReader.readLine()) != null) { strings.add(line); } bufferedReader.close(); strings.forEach(System.out::println); } }
|
文件到集合(改进版)
把文本文件中的数据读取到集合中,并遍历集合,要求:文件中每一行数据是一个学生对象的成员变量值
举例:stu001,张三,25,北京
思路:
- 定义学生类
- 创建字符缓冲输入流对象
- 创建ArrayList集合对象
- 调用字符缓冲输入流对象的方法读取数据
- 把读取到额字符串数据用split()进行分割,得到一个字符串数组
- 创建学生对象
- 把字符串数组中的每一个元素取出来对应的赋值给学生对象的成员变量值
- 把学生对象添加到集合
- 释放资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package com.demo.chars;
import com.demo.model.Student;
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList;
public class TxtToArrayListDemo02 { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new FileReader("java-file-class/students.txt")); ArrayList<Student> students = new ArrayList<>(); String line; while ((line = bufferedReader.readLine()) != null) { String[] strings = line.split(","); Student student = new Student(); student.setSid(strings[0]); student.setName(strings[1]); student.setAge(Integer.parseInt(strings[2])); student.setAddress(strings[3]); students.add(student); } bufferedReader.close(); students.forEach(System.out::println); } }
|
点名器
一个文件里有存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随机点名器
思路:
- 创建字符缓冲输入流对象
- 创建ArrayList集合对象
- 调用字符缓冲输入流对象的方法读数据
- 把读取到的字符串数据存储到集合中
- 释放资源
- 使用Random产生一个随机数,随机数的范围在:[0, 集合的长度)
- 把第6步产生的随机数作为索引到ArrayList集合中获取值
- 把第7步得到的数据输出在控制台
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package com.demo.chars;
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Random;
public class CallNameDemo { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new FileReader("java-file-class/names.txt")); ArrayList<String> names = new ArrayList<>(); String line; while ((line = bufferedReader.readLine()) != null) { names.add(line); } bufferedReader.close(); Random random = new Random(); int index = random.nextInt(names.size()); String name = names.get(index); System.out.println("幸运者是:" + name); } }
|