字节流:
字符流:
文件到集合
把文本文件中的数据读取到集合中,并遍历集合。要求:文件中每一行数据是一个集合元素
文件:
实例代码:
public class ListReader {
public static void main(String[] args) throws IOException {
//创建文件输入流对象
BufferedReader br = new BufferedReader(new FileReader("day09\\MeiNv.txt"));
//创建集合
List<String> list = new ArrayList<>();
//将读出来的数据添加进集合
String s;
while ((s = br.readLine()) != null){
list.add(s);
}
br.close();
//输出集合
System.out.println(list);
}
}
运行结果:
集合到文件
把ArrayList集合中的字符串数据写入到文本文件。要求:每一个字符串元素作为文件中的一行数据
实例代码:
public class ListWriter {
public static void main(String[] args) throws IOException {
//创建集合
List<String> list = new ArrayList<>();
list.add("qiushuzhen");
list.add("zhuyin");
list.add("dilireba");
//遍历集合放进文件
BufferedWriter bw = new BufferedWriter(new FileWriter("day09\\MeiNv.txt"));
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
bw.write(s);
bw.newLine();
}
bw.close();
}
}
运行结果:见上图文件
点名器案例:
有一个文件里面存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随点名器
实例代码:
创建文件:
public class CallName {
public static void main(String[] args) throws IOException {
//创建读文件的对象
BufferedReader br = new BufferedReader(new FileReader("day09\\java1.txt"));
//创建集合
List<String> nameList = new ArrayList<>();
//读文件,放进集合
String name;
while ((name = br.readLine()) != null){
nameList.add(name);
}
br.close();
//生成随机数
Random r = new Random();
int ranNum = r.nextInt(nameList.size());
//打印出姓名,索引为随机数
System.out.println(nameList.get(ranNum));
}
}
运行结果:
集合到文件改进版
把ArrayList集合中的学生数据写入到文本文件。要求:每一个学生对象的数据作为文件中的一行数据 格式: 学号,姓名,年龄,居住地 举例:itheima001,林青霞,30,西安
创建学生类:
public class Student {
private String ID;
private String name;
private int age;
private String addres;
public Student() {
}
public Student(String ID, String name, int age, String addres) {
this.ID = ID;
this.name = name;
this.age = age;
this.addres = addres;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddres() {
return addres;
}
public void setAddres(String addres) {
this.addres = addres;
}
@Override
public String toString() {
return "Student{" +
"ID='" + ID + '\'' +
", name='" + name + '\'' +
", age=" + age +
", addres='" + addres + '\'' +
'}';
}
}
将学生写入文件:
public class StudentToFile {
public static void main(String[] args) throws IOException {
//先创建学生集合
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("001", "迪丽热巴", 24, "我心里"));
studentList.add(new Student("002", "赵丽颖", 25, "我隔壁"));
studentList.add(new Student("003", "杨幂", 24, "我邻居"));
//创建写文件对象 将集合中的元素写进文件
BufferedWriter bw = new BufferedWriter(new FileWriter("day09\\name.txt"));
bw.write("学号,姓名,年龄,居住地");
bw.newLine();
for (Student student : studentList) {
//获取的数据要拼接起来写进文件
StringBuilder sb = new StringBuilder();
sb.append(student.getID()).append(",").append(student.getName()).append(",").append(student.getAge()).append(",").append(student.getAddres());
bw.write(sb.toString());
bw.newLine();
}
bw.close();
}
}
运行结果:
文件到集合改进版
把文本文件中的数据读取到集合中,并遍历集合。要求:文件中每一行数据是一个学生对象的成员变量值 举 例:itheima001,林青霞,30,西安
读取文件中的数据到集合:
public class FileToStudent {
public static void main(String[] args) throws IOException {
//先创建读文件的对象来读取name文件
BufferedReader br = new BufferedReader(new FileReader("day09\\name.txt"));
//创建集合用来存学生对象
List<Student> studentList = new ArrayList<>();
//因为第一行是表头,不用存进集合所以单独读出来
br.readLine();
String student;
while ((student = br.readLine()) != null){
//取出来的是字符串 要切割成字符串数组
String[] split = student.split(",");
String id = split[0];
String name = split[1];
String age = split[2];
String addres = split[3];
//放进学生类中
Student st = new Student(id,name,Integer.parseInt(age),addres);
//将学生添加进集合
studentList.add(st);
}
br.close();
for (Student student1 : studentList) {
System.out.println(student1);
}
//查看集合中的元素
//System.out.println(studentList);
}
}
运行结果: