集合到文件

把ArrayList集合中的字符串数据写入到文本文件中,要求:每一个字符串元素作为文件中的一行数据

思路:

  1. 创建ArrayList集合
  2. 往集合中存储字符串元素
  3. 创建字符缓冲输出流对象
  4. 遍历集合,得到每一个字符串数据
  5. 调用字符缓冲输出流对象的方法写数据
  6. 释放资源
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;

/**
* @author jingLv
* @date 2020/12/14
*/
public class ArrayListToTxtDemo {
public static void main(String[] args) throws IOException {
// 1. 创建ArrayList集合
ArrayList<String> strings = new ArrayList<>();
// 2. 往集合中存储字符串元素
strings.add("hello");
strings.add("world");
strings.add("java");
// 3. 创建字符缓冲输出流对象
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("java-file-class/array.txt"));
// 4. 遍历集合,得到每一个字符串数据
for (String string : strings) {
// 5. 调用字符缓冲输出流对象的方法写数据
bufferedWriter.write(string);
bufferedWriter.newLine();
bufferedWriter.flush();
}
// 6. 释放资源
bufferedWriter.close();
}
}

集合到文件(改进版)

把ArrayList集合中的学生数据写入到文本文件中,要求:每一个学生对象的数据作为文件中的一行数据

举例:

  • 格式:学生,学号,年龄,居住地
  • 示例:stu001,张三,25,北京

思路:

  1. 定义学生类
  2. 创建ArrayList集合
  3. 创建学生对象
  4. 把学生对象添加到集合中
  5. 创建字符缓冲输出流对象
  6. 遍历集合,得到每一个学生对象
  7. 把学生对象的数据拼接成指定格式的字符串
  8. 调用字符缓冲输出流对象的方法写数据
  9. 释放资源
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;

/**
* @author jingLv
* @date 2020/12/15
*/
public class ArrayListToTxtDemo02 {
public static void main(String[] args) throws IOException {
// 1. 定义学生类-- model/Student.java
// 2. 创建ArrayList集合
ArrayList<Student> students = new ArrayList<>();
// 3. 创建学生对象
Student student1 = new Student("stu001", "张三", 25, "北京");
Student student2 = new Student("stu002", "李四", 30, "武汉");
Student student3 = new Student("stu003", "王五", 20, "上海");
Student student4 = new Student("stu004", "赵六", 18, "成都");
// 4. 把学生对象添加到集合中
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
// 5. 创建字符缓冲输出流对象
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("java-file-class/students.txt"));
// 6. 遍历集合,得到每一个学生对象
for (Student student : students) {
// 7. 把学生对象的数据拼接成指定格式的字符串
StringBuilder stringBuilder = new StringBuilder();
// 字符串拼接
stringBuilder.append(student.getSid()).append(",")
.append(student.getName()).append(",")
.append(student.getAge()).append(",")
.append(student.getAddress());
// 8. 调用字符缓冲输出流对象的方法写数据
bufferedWriter.write(stringBuilder.toString());
bufferedWriter.newLine();
bufferedWriter.flush();
}
// 9. 释放资源
bufferedWriter.close();
}
}

集合到文件(数据排序改进版)

键盘录入5个学生信息(姓名,语文成绩,数据成绩,英语成绩)。要按照成绩总分从高到低写入文本文件中

格式:姓名,语文成绩,数据成绩,英语成绩

举例:张三,98.99.100

思路:

  1. 定义学生类
  2. 创建TreeSet集合,通过比较器排序进行排序
  3. 键盘录入数据
  4. 创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
  5. 把学生对象添加到TreeSet集合
  6. 创建字符缓冲输出流对象
  7. 遍历集合,得到每一个学生对象
  8. 把学生对象的数据拼接成指定格式的字符串
  9. 调用字符缓冲输出流对象的方法写数据
  10. 释放资源
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;

/**
* @author jingLv
* @date 2020/12/17
*/
public class TreeSetToFileDemo {
public static void main(String[] args) throws IOException {
// 1. 定义学生类--model/StudentSource.java
// 2. 创建TreeSet集合,通过比较器排序进行排序
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;
}
});
// 3. 键盘录入数据
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();

// 4. 创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
StudentSource studentSource = new StudentSource();
studentSource.setName(name);
studentSource.setChinese(chinese);
studentSource.setMath(math);
studentSource.setEnglish(english);

// 5. 把学生对象添加到TreeSet集合
students.add(studentSource);
}
// 6. 创建字符缓冲输出流对象
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("java-file-class/studentSource.txt"));
// 7. 遍历集合,得到每一个学生对象
for (StudentSource student : students) {
// 8. 把学生对象的数据拼接成指定格式的字符串
// 9. 调用字符缓冲输出流对象的方法写数据
String str = student.getName() + "," +
student.getChinese() + "," +
student.getMath() + "," +
student.getEnglish() + "," +
student.getSum();
bufferedWriter.write(str);
bufferedWriter.newLine();
bufferedWriter.flush();
}
// 10. 释放资源
bufferedWriter.close();
}
}

文件到集合

把文本文件中的数据读取到集合中,并遍历集合,要求:文件中每一行数据是一个集合元素

思路:

  1. 创建字符缓冲输入流对象
  2. 创建ArrayList集合对象
  3. 调用字符缓冲输入流对象的方法读取数据
  4. 把读取到的字符串数据存储到集合中
  5. 释放资源
  6. 遍历集合
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;

/**
* @author jingLv
* @date 2020/12/14
*/
public class TxtToArrayListDemo {
public static void main(String[] args) throws IOException {
// 1. 创建字符缓冲输入流对象
BufferedReader bufferedReader = new BufferedReader(new FileReader("java-file-class/array.txt"));
// 2. 创建ArrayList集合对象
ArrayList<String> strings = new ArrayList<>();
// 3. 调用字符缓冲输入流对象的方法读取数据
String line;
while ((line = bufferedReader.readLine()) != null) {
// 4. 把读取到的字符串数据存储到集合中
strings.add(line);
}
// 5. 释放资源
bufferedReader.close();
// 6. 遍历集合
strings.forEach(System.out::println);
}
}

文件到集合(改进版)

把文本文件中的数据读取到集合中,并遍历集合,要求:文件中每一行数据是一个学生对象的成员变量值

举例:stu001,张三,25,北京

思路:

  1. 定义学生类
  2. 创建字符缓冲输入流对象
  3. 创建ArrayList集合对象
  4. 调用字符缓冲输入流对象的方法读取数据
  5. 把读取到额字符串数据用split()进行分割,得到一个字符串数组
  6. 创建学生对象
  7. 把字符串数组中的每一个元素取出来对应的赋值给学生对象的成员变量值
  8. 把学生对象添加到集合
  9. 释放资源
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;

/**
* @author jingLv
* @date 2020/12/15
*/
public class TxtToArrayListDemo02 {
public static void main(String[] args) throws IOException {
// 1. 定义学生类-- model/Student.java
// 2. 创建字符缓冲输入流对象
BufferedReader bufferedReader = new BufferedReader(new FileReader("java-file-class/students.txt"));
// 3. 创建ArrayList集合对象
ArrayList<Student> students = new ArrayList<>();
// 4. 调用字符缓冲输入流对象的方法读取数据
String line;
while ((line = bufferedReader.readLine()) != null) {
// 5. 把读取到额字符串数据用split()进行分割,得到一个字符串数组
String[] strings = line.split(",");
// 6. 创建学生对象
Student student = new Student();
// 7. 把字符串数组中的每一个元素取出来对应的赋值给学生对象的成员变量值
student.setSid(strings[0]);
student.setName(strings[1]);
student.setAge(Integer.parseInt(strings[2]));
student.setAddress(strings[3]);
// 8. 把学生对象添加到集合
students.add(student);
}
// 9. 释放资源
bufferedReader.close();
// 遍历集合
students.forEach(System.out::println);
}
}

点名器

一个文件里有存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随机点名器

思路:

  1. 创建字符缓冲输入流对象
  2. 创建ArrayList集合对象
  3. 调用字符缓冲输入流对象的方法读数据
  4. 把读取到的字符串数据存储到集合中
  5. 释放资源
  6. 使用Random产生一个随机数,随机数的范围在:[0, 集合的长度)
  7. 把第6步产生的随机数作为索引到ArrayList集合中获取值
  8. 把第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;

/**
* @author jingLv
* @date 2020/12/14
*/
public class CallNameDemo {
public static void main(String[] args) throws IOException {
// 1. 创建字符缓冲输入流对象
BufferedReader bufferedReader = new BufferedReader(new FileReader("java-file-class/names.txt"));
// 2. 创建ArrayList集合对象
ArrayList<String> names = new ArrayList<>();
// 3. 调用字符缓冲输入流对象的方法读数据
String line;
while ((line = bufferedReader.readLine()) != null) {
// 4. 把读取到的字符串数据存储到集合中
names.add(line);
}
// 5. 释放资源
bufferedReader.close();
// 6. 使用Random产生一个随机数,随机数的范围在:[0, 集合的长度)
Random random = new Random();
int index = random.nextInt(names.size());
// 7. 把第6步产生的随机数作为索引到ArrayList集合中获取值
String name = names.get(index);
// 8. 把第7步得到的数据输出在控制台
System.out.println("幸运者是:" + name);
}
}