定义接口 规范文件操作类型

import java.util.List;/*** 控制普通文件读取操作的类* 一般来讲是换行读取、字符流* @param <T> 待存取的类型*/
public interface IFileOperation<T> {/*** 增* @param object*/void add(T object);/*** 删* @param object*/void delete(T object);/*** 查* @return*/List<T> getAll();/*** 改* @param object*/void update(T object);}

文本类型数据文件内容:

ID#Code#Name#Classification#Type
1#XXGNK#心血管内科#内科#临床
2#SJNK#神经内科#内科#临床
3#PTNK#普通内科#内科#临床
4#XHNK#消化内科#内科#临床
5#HXNK#呼吸内科#内科#临床
6#NFMK#内分泌科#内科#临床
7#SBNK#肾病内科#内科#临床

读写分析

插入操作,为简便起见,建议插在末尾。
删除操作,不建议在遍历中删除,因为迭代器遍历(增强for循环实质上是迭代器)中并发修改会fail-fast,抛出并发修改异常。
修改操作,在循环的时候也是,貌似写不进去的。
查询操作,很简单啦,查就完事。

建议全取出来再处理,毕竟IO真的慢,一直是一边IO一边操作也不太现实吧(这可不是数据库,数据库有些功能直接在SQL里指定了)。

实现类Mapper

肯定是单例模式啦。
实现上面的接口,给一个类型,实现对应的增删改查方法。
另外,处理好读写格式很重要,其中我用的是多个“+”连接字符串,其实这么多的连接就完全可以用StringBuilder了。

public class DepartmentMapper implements IFileOperation<Department> {private static DepartmentMapper mapper;private DepartmentMapper() {}/*** 获取单例* @return*/public static DepartmentMapper getInstance() {if (mapper == null) {mapper = new DepartmentMapper();}return mapper;}/*** 根据传入对象插入部门*/@Overridepublic void add(Department object) {if (object != null) {        List<Department> departmentList = getAll();for (Department department : departmentList) {if (department.getId().equals(object.getId())) {return;}}departmentList.add(object);writeDepartment(departmentList);} }/*** 根据传入对象删除部门*/@Overridepublic void delete(Department object) {List<Department> departmentList = getAll();Department deleteObj = null;for (Department department : departmentList) {if (department.getId().equals(object.getId())) {deleteObj = department;break;}}if (deleteObj != null) {departmentList.remove(deleteObj);}writeDepartment(departmentList);}/*** 获取所有部门*/@Overridepublic List<Department> getAll() {List<Department> departmentList = new ArrayList<>();try (Scanner scanner = new Scanner(new FileReader(DEPARTMENT_FILENAME))) {scanner.nextLine();while (scanner.hasNextLine()) {String line = scanner.nextLine();departmentList.add(generateDepartment(line));}} catch (IOException ioe) {ioe.printStackTrace();}return departmentList;}/*** 更新一个部门信息*/@Overridepublic void update(Department object) {List<Department> departmentList = getAll();Department temp = null;for (Department department : departmentList) {if (department.getId().equals(object.getId())) {temp = department;break;}}temp= object;writeDepartment(departmentList);}/*** 完成修改后的写入* @param departmentList*/private void writeDepartment(List<Department> departmentList) {try (BufferedWriter tempWriter = new BufferedWriter(new FileWriter(DEPARTMENT_FILENAME));BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(DEPARTMENT_FILENAME, true))) {  tempWriter.write("");for (Department department : departmentList) {String line = department.getId() + SPLIT_CHARACTER + department.getCode() + SPLIT_CHARACTER+ department.getName() + SPLIT_CHARACTER + department.getClassification() + SPLIT_CHARACTER+ department.getType() + "\n";bufferedWriter.write(line);}} catch (IOException ioe) {ioe.printStackTrace();}}/*** 一个被封装的方法,作用是把读出来的一行拆分组合为一个Department对象* @param line* @return*/private Department generateDepartment(String line) {String[] strList = line.split(SPLIT_CHARACTER);int id = Integer.parseInt(strList[0]);String code = strList[1];String name = strList[2];String classification = strList[3];String type = strList[4];Department department = new Department(id, code, name, classification, type);return department;}/*** 依据科室名称找到科室* @param name* @return*/public Department getElementByName(String name) {if (name == null) {return null;}List<Department> departmentList = getAll();for (Department department : departmentList) {if (name.equals(department.getName())) {return department;}}return null;}}

【Java】格式化的文件I/O相关推荐

  1. java格式化XML文件

    现有的xml格式不符合程序的要求,于是动手写一个格式化xml的小工具. 现有的数据格式是这样的 格式化之后的效果 格式化xml的方法有很多,我使用的是Dom4j方法 public class Form ...

  2. java 格式化json_JAVA 格式化JSON数据并保存到json文件中的实例

    使用fastjson格式化json数据并保存到文件 /** * 将JSON数据格式化并保存到文件中 * @param jsonData 需要输出的json数 * @param filePath 输出的 ...

  3. java解析csv文件写入mysql_java读取cvs文件并导入数据库

    本文实例为大家分享了java读取cvs文件并导入数据库的具体代码,供大家参考,具体内容如下 首先获取文件夹下面的所有类型相同的excel,可以用模糊匹配contains("匹配字段" ...

  4. java 删除指定文件夹和下面所有文件_java——File IO流

    1.File(掌握) (1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件 (2)构造方法 A:File file = new File("e:demoa ...

  5. 【Java 编程】文件操作,文件内容的读写—数据流

    一.认识文件 1.什么是文件 平时说的文件一般都是指存储在硬盘上的普通文件 形如 txt, jpg, mp4, rar 等这些文件都可以认为是普通文件,它们都是在硬盘上存储的 在计算机中,文件可能是一 ...

  6. java txt数据导入excel,java导入excle文件《如何用java 将txt数据导入excel》

    如何用java 将txt数据导入excel 代码如下: import java.io.*; import jxl.*; import jxl.write.*; public class CreateX ...

  7. Java操作Excel之POI:java读写excel文件以及打印设置

    Java操作Excel之POI:java读写excel文件以及打印设置 POI的jar包下载地址:http://poi.apache.org/download.html 注意:项目中导入poi 4.0 ...

  8. Java中的文件输入输出操作如何实现

    Java是一门广泛应用的编程语言,它被用于开发各种类型的应用程序,包括桌面应用.服务器端应用和移动应用.在Java中,文件输入输出操作是很常见的,因为它们可以用于读取和写入文件数据.在本文中,我们将探 ...

  9. java导出csv文件乱码_记一次java生成csv文件乱码的解决过程 (GB2312编码)

    系统:win7 (格式:中文(简体,中国)) 工具:Eclipse (默认编码utf-8) 服务两个:[restful接口]  和 [服务*** server]. 场景:[服务*** server]多 ...

  10. java 批量写入文件_Java批量写入文件和下载图片的示例代码

    很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...

最新文章

  1. sparkContext之一:sparkContext的初始化分析
  2. [转载] iphone 很有意思的NSString 和 Autorelease
  3. 查看运行状态_查看 Linux 系统服务的 5 大方法
  4. 《Java语言导学(原书第6版)》一一1.5 问题和练习:快速入门
  5. php js获取file,PHP file_get_contents 读取js脚本的问题
  6. 干货!不得不知的UI界面中“行为召唤按钮”设计秘诀
  7. 傻瓜突破linux--rootpassword
  8. openshift使用_OpenShift DIY:使用Gradle构建Spring Boot / Undertow应用程序
  9. mybatis-plus分页查询_SpringBoot + MyBatisPlus 快速入门
  10. ffmpeg超详细综合教程(二)——为直播流添加滤镜
  11. mysql源代码多少行_数据库是一个庞大的工程,本来想读读mysql的开源代码,可看到代码行数.doc...
  12. 简述在计算机中如何添加或删除输入法,Windows 7系统怎么添加或删除输入法?方法介绍...
  13. 训练序列与导频序列的概念辨析
  14. 2022年工作日节假日数据
  15. python对比excel重复数据_Python-查找excel文档中的重复数据
  16. html阅读封面代码,封面.html
  17. 通过CSS3实现:鼠标悬停图片360度旋转效果
  18. 人工智能和人类智能的本质区别是什么(五)
  19. 小数化分数的口诀表_循环小数化分数口诀
  20. sql查询数据库表中重复数值

热门文章

  1. IDEA建立Spring MVC Hello World 详细入门教程
  2. weak_ptr打破环状引用
  3. Mac下svn搭建和使用方法
  4. shell(希尔)排序
  5. 《吴恩达深度学习》第一课第四周任意层的神经网络实现及BUG处理
  6. 微信开发--自定义菜单
  7. activiti5第六弹 手动任务、接收任务、邮件任务
  8. 由于没有远程桌面授权服务器可以提供许可证,远程会话被中断
  9. 岗位po是什么意思_劳务派遣是什么意思,劳务派遣和正式员工区别在哪
  10. linux飞行模式自动开机,解决 win10飞行模式 无限自动开关 无法关闭