文件中的学生信息

  学生信息存储在TXT文件中,我们需要对信息进行基本的,增、删、改、查,全部显示操作。

1、学生类/Student

package com.yujiao.student;

public class Student {
/**学生id*/
private int id;
/**学生姓名*/
private String name;
/**学生年龄*/
private int age; public int getId() {
return id;
} public void setId(int 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 Student() {
}
/**
* 有参构造方法
*/
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
} /**
* 重写的toString方法
*/ @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
} }

2、学生管理类的接口定义/StudentManagement

 package com.yj.student;

 import java.util.List;

 public interface IStudentManager {

    /** 默认文件存放位置*/
public String DEFAULT_PATH = "E:\\Test\\student.txt"; /**
* 获得所有学生信息
* @return 学生信息的List泛型集合
*/
public List<Student> list(); /**
* 根据学生id获取对应的学生对象
* @param id
* @return
*/
public Student get(int id); /**
* 根据指定id删除学生信息
* @param id 学生id
* @return 删除成功返回true,失败返回false
*/
public boolean delete(int id); /**
* 根据传入学生对象的信息,修改学生
* 如果传入学生对象的id能够找到对象的信息,那么就修改
* @param student 学生对象,将需要修改的信息封装在这个对象中
* @return 修改成功true,否则false
*/
public boolean update(Student student); /**
* 传入学生对象,加入到文本信息中
* @param student 学生对象
* @return 添加成功true,否则false
*/
public boolean add(Student student); }

3、学生管理类接口的实现类/MyStudentManagement

 package com.yj.student;

 import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List; public class StudentManagerImpl implements IStudentManager { /** 自定义文本位置的路径 */
private String Path; /**
* 默认构造方法,给到了默认路径
*/
public StudentManagerImpl() {
this.Path = DEFAULT_PATH;
} /**
* 根据传入的路径读取文本文件
*
* @param path 传入的文件路径
*/
public StudentManagerImpl(String path) {
this.Path = path;
} @Override
public List<Student> list() {
List<Student> list = new ArrayList<Student>();
BufferedReader br = null; try {
br = new BufferedReader(new FileReader(this.Path));
String str = null;
while ((str = br.readLine()) != null) {
String[] strs = str.split("\\s+");
int id = Integer.parseInt(strs[0]);
String name = strs[1];
int age = Integer.parseInt(strs[2]); Student s = new Student(id, name, age);
list.add(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
} @Override
public Student get(int id) {
Student stu = null;
BufferedReader br = null; try {
br = new BufferedReader(new FileReader(this.Path));
String str = null;
while ((str = br.readLine()) != null) {
String[] strs = str.split("\\s+");
int sid = Integer.parseInt(strs[0]);
String name = strs[1];
int age = Integer.parseInt(strs[2]);
if (id == sid) {
stu = new Student(sid, name, age);
break;
} }
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return stu;
} @Override
public boolean delete(int id) {
//先把文本文档中的内容读取到内存中
List<Student> stus = list();
boolean flag = false; // 在集合中找到对象并且删除对应的学生对象
for (int i = 0; i < stus.size(); i++) {
Student s = stus.get(i);
if (s.getId() == id) {
flag = true;
stus.remove(s);
break;
}
}
// 将集合中的内容整个重新写到文本文件中
if (flag) {
PrintWriter out = null;
try {
out = new PrintWriter(Path);
for (int i = 0; i < stus.size(); i++) {
Student s = stus.get(i);
String str = s.getId()+" "+s.getName()+" "+s.getAge();
out.println(str);
} } catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
}
}
return flag;
} @Override
public boolean update(Student student) {
// 先把文本文档中的内容读取到内存中
List<Student> stus = list();
boolean flag = false; // 在集合中找到对象并且删除对应的学生对象
for (int i = 0; i < stus.size(); i++) {
Student s = stus.get(i);
if (s.getId() == student.getAge()) {
flag = true;
s.setAge(student.getAge());
s.setName(student.getName());
break;
}
}
// 将集合中的内容整个重新写到文本文件中
if (flag) {
PrintWriter out = null;
try {
out = new PrintWriter(Path);
for (int i = 0; i < stus.size(); i++) {
Student s = stus.get(i);
String str = s.getId() + " " + s.getName() + " " + s.getAge();
out.println(str);
} } catch (FileNotFoundException e) {
flag = false;
e.printStackTrace();
} finally {
try {
out.close();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
}
}
return flag;
} @Override
public boolean add(Student student) {
// 先把文本文档中的内容读取到内存中
boolean flag = false;
PrintWriter out = null; try {
out = new PrintWriter(new FileWriter(this.Path, true));
out.println(student.getId() + " " + student.getName() + " " + student.getAge());
flag = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (Exception e2) {
e2.printStackTrace();
} }
return flag;
} public String getPath() {
return Path;
} public void setPath(String path) {
this.Path = path;
} }
/** 学生id */

Java中流的操作练习的更多相关文章

  1. 第57节:Java中流的操作以及编码解码

    我的博客: https://huangguangda.cn/ https://huangguangda.github.io/ 前言: 编码解码:编码时将信息从一种形式变成为另一种形式,成为编码.编码为 ...

  2. java.io中流的操作:字节流、字符流

    java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...

  3. 《精通并发与Netty》学习笔记(09 - Java中流的概念)

    Java中流的概念 java程序通过流来完成输入/输出.流是生产或消费信息的抽象.流通过java的输入/输出与物理设备链接.尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式.这样,相同的输 ...

  4. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  5. Java的JDBC操作

    Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...

  6. Java读写文本文件操作

    package com.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; ...

  7. 第26章 java进制操作

    java进制操作 1.二进制 二进制只有0和1,逢二进一 二进制多用在计算机中,来自计算机硬件的开关闭合 2.位运算 分别讲解: 2.1.按位与 & 两位全为1,结果才为1 0&0=0 ...

  8. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  9. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

随机推荐

  1. vue中axios的二次封装

    我们做项目时,虽然axios也可以直接拿来用,但是对接口比较零散,不太好进行维护,也会产生大量的重复代码,所以我在这对axios进行了统一接口处理 第一步,先在src中的公共文件夹中如utils里新建 ...

  2. USACO14MAR The Lazy Cow(Gold)

    题目 题意:平面上有 \(n\) 块草地,第 \(i\) 块草地坐标为 \((x_i,y_i)\) ,上面有 \(g_i\) 个单位的草.Bessie 可以吃到距离起始点不超过 \(k\)(这里是曼哈 ...

  3. jQuery动画之停止动画

    语法格式: $(selector).stop(true, false); 第一个参数: + ture: 后续动画不执行 false:后续动画会执行 第二个参数: true: 立即执行完成当前动画 fa ...

  4. [CSP-S模拟测试]:装饰(数学)

    题目传送门(内部题147) 输入格式 每个测试点第一行一个正整数$T$,表示该测试点内的数据组数. 接下来$T$行,每行三个非负整数$a,b,c$,含义如题目中所示. 输出格式 对每组数据输出一行一个 ...

  5. 20191114-3 Beta阶段贡献分配

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10006 要求1 每位组员的贡献分值 贺敬文:10 王志文:9 彭思雨:8 ...

  6. git忽略提交:.gitignore

    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交. Git 忽略文件提交的方法 有三种方法可以实现忽略Gi ...

  7. SRS之RTMP连接处理线程conn:接收客户端推流

    由 SRS之RTMP的TCP线程 分析可知,SRS 接受客户端的连接后创建了一个线程:conn,用于处理与客户端的 RTMP 连接. 本文的分析是基于该配置文件的: listen 1935; max_ ...

  8. Laravel find in set排序

    做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列.例如,用户状态有四种: 0=>未激活:1=>正常:2=>禁用:3=>软删除 现在的需求是,我要按照:正常-> ...

  9. Python是否存在方法方法重载及是否可以不显示声明初始化方法

    一.python中是否存在方法重载 对java有了解的程序员都知道,java中存在构造方法重载和普通方法重载,重载指的是方法名相同,参数列表不同的多个方法.python中是否也支持这两种方法重载,测试 ...

  10. javascript之常用事件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...