文件中的学生信息

  学生信息存储在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. Linux系统安装xinetd服务

    只需安装xinetd包 安装包 #yum -y install xinetd 安装成功后即可 service xinetd start service xinetd stop service xine ...

  2. xss跨站攻击原理

    https://www.cnblogs.com/frankltf/p/8975010.html 跨站脚本攻击:通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,一旦攻击成功,它可以获取用户 ...

  3. 重启php7.0-fpm

    /etc/init.d/php7.0-fpm restart

  4. AcWing:173. 矩阵距离(bfs)

    给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...

  5. Linux 搭建Mysql主从节点复制

    Linux环境 Centos 6.6 64位 准备两台服务器,搭建一主一从,实现Mysql的读写分离和数据备份 主节点 192.168.43.10 leader 从节点 192.168.43.20 d ...

  6. rabbitmq访问控制试坑篇

    访问控制我理解就是两层,第一层是Virtual host,相当于一个个独立主机 第二层是这个permissions,对照下图权限表 权限表(重要!) 需求 configgure write read ...

  7. MySql 时区错误

    mysql的时区错误问题: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one ...

  8. State Threads之编程注意事项

    原文: Programming Notes 1. 移植 State Thread 库可移植到大多数类 UNIX 平台上,但是该库有几个部分需要依赖于平台特性,以下列出了这些部分: 线程上下文初始化. ...

  9. 小程序web-view利用url给内嵌的网页传值

    这个方法跟网页上的一样,直接通过截取url中传过来的参数来取值 <web-view src="https://www.baidu.com/test.html?url=http://ww ...

  10. hearthbuddy中的Class276

    构造函数 需要注意的是this.intptr_0 = this.method_18("mono.dll"); 所以,这个类里面的操作,最后是和mono.dll相关的 interna ...