文件中的学生信息

  学生信息存储在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. word文档在线预览地址

    文档网址 http://www.officeweb365.com/Default/Docview 对接 http://ow365.cn/?i=19604&furl=http:://www.ba ...

  2. 【Python之路】特别篇--Git & GitHub

    版本控制工具主要实现2个功能: 版本管理 在开发中,这是刚需,必须允许可以很容易对产品的版本进行任意回滚,版本控制工具实现这个功能的原理简单来讲,就是你每修改一次代码,它就帮你做一次快照 协作开发 一 ...

  3. BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基

    BZOJ严重卡精,要加 $long$  $double$ 才能过. 题意:求权和最小的极大线性无关组. 之前那个方法解的线性基都是基于二进制拆位的,这次不行,现在要求一个适用范围更广的方法. 考虑贪心 ...

  4. CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)E

    题面 这个题暴好啊,考了很多东西. 首先设f(x)为离终点还有x步要走的期望步数,我们可以发现 : 1.x>=k时,x可以转移到的点的下标都<x. 2.x<k时,则可能走回到x或者下 ...

  5. redis 关闭持久化 实验验证

    前言 由于redis持久化(RDB),导致我们的线上的磁盘被写炸 线上服务器是 64H 512G 大概写了rdb文件是 200G左右,写满了当时的目录 处理策略 关闭持久化,由于之前的现象表示,我们线 ...

  6. python多环境切换,pyenv的使用

    1.安装pyenv:https://github.com/pyenv/pyenv-installer curl -L https://github.com/pyenv/pyenv-installer/ ...

  7. Rabbitmq的高级特性

    消息如何保证100%投递成功? 什么是生产端的可靠性投递? 1.保障消息的成功发出 2.保障MQ节点的成功接收 3.发送端收到MQ节点(Broker)确认应答 4.完善的消息补偿机制 BAT互联网大厂 ...

  8. R-aggregate()

    概述 aggregate函数应该是数据处理中常用到的函数,简单说有点类似sql语言中的group by,可以按照要求把数据打组聚合,然后对聚合以后的数据进行加和.求平均等各种操作. x=data.fr ...

  9. (八)C语言之printf

  10. SRS之SrsRtmpConn::stream_service_cycle详解

    首先使用 obs 推流符合如下流程:参考自 Hanvision Makito X cann't publish to SRS.. FFMPEG: C/S: Handshake C: ConnectAp ...