Java中流的操作练习
文件中的学生信息
学生信息存储在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中流的操作练习的更多相关文章
- 第57节:Java中流的操作以及编码解码
我的博客: https://huangguangda.cn/ https://huangguangda.github.io/ 前言: 编码解码:编码时将信息从一种形式变成为另一种形式,成为编码.编码为 ...
- java.io中流的操作:字节流、字符流
java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...
- 《精通并发与Netty》学习笔记(09 - Java中流的概念)
Java中流的概念 java程序通过流来完成输入/输出.流是生产或消费信息的抽象.流通过java的输入/输出与物理设备链接.尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式.这样,相同的输 ...
- Java Spring mvc 操作 Redis 及 Redis 集群
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...
- Java的JDBC操作
Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...
- Java读写文本文件操作
package com.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; ...
- 第26章 java进制操作
java进制操作 1.二进制 二进制只有0和1,逢二进一 二进制多用在计算机中,来自计算机硬件的开关闭合 2.位运算 分别讲解: 2.1.按位与 & 两位全为1,结果才为1 0&0=0 ...
- Java生成和操作Excel文件(转载)
Java生成和操作Excel文件 JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...
随机推荐
- webpack官方文档分析(二):概念
1.概念 webpack的核心是将JavaScript应用程序的静态捆绑模块.当webpack处理您的应用程序时,它会在内部构建一个依赖关系图,它映射您的项目所需的每个模块并生成一个或多个包. 从版本 ...
- 妙味课堂——JavaScript基础课程笔记
集中时间把秒微课堂JS的基础课程看完,并且认真完成了课后练习.感觉在JS方面的技能算是入了个门了.课后练习的作业完成的代码我都汇总在了这里.至于视频课的学习笔记,则记录如下. 第01课JS入门基础_热 ...
- codeforces402B
Trees in a Row CodeForces - 402B The Queen of England has n trees growing in a row in her garden. At ...
- vue 钩子函数的使用
1.什么是自定义指令,有哪些钩子函数及自定义指令的使用场景 ①自定义指令是什么?以及自定义指令的使用场景 在Vue中,有很多内置指令,但是这些指令只能满足我们最基础的使用,当我们在实际项目中遇到了必须 ...
- MySQL_(Java)使用JDBC向数据库中插入(insert)数据
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...
- 为什么还需要学习TypeScript
开篇 TypeScript 是由 C#语言的创始人 Anders Hejlsberg 设计的一种编程语言,设计的初衷就是为了帮助 JavaScript 的开发人员能像类似高级语言c#,Java那样编写 ...
- python3笔记二十:时间操作time
一:学习内容 time时间戳 time元组 time字符串 time时间转换图解 二:time 需要引入:import time 1.概念 UTC(世界协调时间):格林尼治天文时间,世界标准时间,在中 ...
- golang 要去学习的文档记录
xrom开发文档地址: http://gobook.io/read/github.com/go-xorm/manual-zh-CN/chapter-10/ golang基础知识: https://ww ...
- SLC-Microsoft:Microsoft Lifecycle Policy
ylbtech-SLC-Microsoft:Microsoft Lifecycle Policy Microsoft Lifecycle Policy The Microsoft Lifecycle ...
- Find Method Sign Line Number
package java9; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; i ...