文章目录

  • 1、本篇文章目的
  • 2、需求场景
    • 1)准备员工信息文件
    • 2)需要完成的内容
  • 3、开发工作
    • 1)开发思路分析
    • 2)开发
    • 3)结果

公众号有技能演示视频,大家可搜索添加公众号 taishangcode 进行同步学习。

1、本篇文章目的

前面学了集合、IO流相关内容,有必要小综合一下。这里我就结合常用业务场景,让初学者完成一个小的技能演练,以增加对知识应用和掌握的熟练度。

2、需求场景

1)准备员工信息文件

项目 src 目录下创建 user.info 文件,内容如下:
内容对应意思:姓名,年龄,性别,生日,工资

张三,28,男,19870624,8500
李四,32,男,19910321,9000
小萌,30,女,19900831,7000
小李,18,男,20010123,8000

2)需要完成的内容

①、递归遍历项目 src 下的所有文件(不包括目录),然后输出;
②、查找文件的过程中,如果是 user.info 文件,则读取文件信息,把所有男性的员工信息写入到 src 下 male.info 文件中
③ 输出名字含有“ 小” 的员工信息。

3、开发工作

1)开发思路分析

实现思路有很多,这里就用下学过的重点内容去完成。
①、遍历 src 下所有文件,你也不知道有多少个目录,目录下又有多少其他目录和文件,所以只能用递归遍历;
②、在递归过程中,判断文件名是否是 user.info ,是则采用 IO 流读取文件信息,因为要把所有男性员工信息写入到 src 下的 male.info 中,我们可以先把所有男性员工信息拼接起来,然后写到文件中
③、我们可以把内容分割后得到姓名,以姓名为 key,信息为 value 存到 map 中,然后直接判断 key

2)开发

package oc19;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** @author 太上码农/taishangcode* @desc 递归指定目录下的所有文件,读取 user.info 内容,把男员工信息写入 male.info*/
public class FileTest {//src 所在计算机磁盘中的位置private static final String SRC_PATH="D:\\workspace\\eclipse\\base\\outputcontent\\src";private static Map<String, String> hashMap = new HashMap<>();private static String USER_PATH;public static void main(String[] args) {System.out.println("开始遍历项目 src 下的所有文件:");getFile(SRC_PATH);System.out.println("遍历完毕!开始读取文件获取男员工信息写入文件...");executeTask(USER_PATH);System.out.println("读取并写入完毕...");System.out.println("打印名字中含有 小 的员工信息:");printInfo();System.out.println("打印完毕,程序结束!");}//该方法用来递归遍历 src 下的所有文件//递归:方法调用方法自己 getFile(String path) 就是private static void getFile(String path) {File file = new File(path);File[] files = file.listFiles();for (File f : files) {if(f.isFile()) {//如果是文件,则输出System.out.println("文件:"+f.getPath());//如果是 user.info 文件,则读取并完成后面的操作if("user.info".equals(f.getName())) {USER_PATH = f.getPath();   //把 user.info 路径记录下来}}if(f.isDirectory()) {//如果是目录,把当前目录传进去重新去查找getFile(f.getPath());//将最新目录传递进去继续查找}}}private static void executeTask(String path) {BufferedReader br = null;BufferedWriter bw = null;try {//读取 user.infobr = new BufferedReader(new FileReader(path));//要写入的文件String destFile = SRC_PATH+File.separator+"male.info";File file = new File(destFile);if(!file.exists()) {   //文件不存在则创建file.createNewFile();}bw = new BufferedWriter(new FileWriter(file));//开始读取 user.infoStringBuffer sb = new StringBuffer();   //用来存储男员工信息String line ;while((line=br.readLine()) != null) {String[] infos = line.split(",");//如果第三个字段是 男,则存起来if("男".equals(infos[2])) {sb.append(line+"\n");}//为了方便获取名字中含有 "小"的员工信息,我们用 HashMap 存起来hashMap.put(infos[0],line); //key 是姓名 ,value 是信息}//往 male.info 中写信息bw.write(sb.toString());bw.flush();} catch (Exception e) {e.printStackTrace();} finally {//无论什么情况下,代码最终都要把流关闭,所以放在 finally 语句块中try {bw.close();br.close();} catch (IOException e) {e.printStackTrace();}}}//打印名字中含有 "小" 的员工信息private static void printInfo() {for(String name : hashMap.keySet()) {if(name.contains("小")) {System.out.println(hashMap.get(name));}}}
}

3)结果

运行结果后,遍历的文件结果取决于你项目 src 下有都有什么,下面是我运行的结果:

开始遍历项目 src 下的所有文件:
文件:
文件:D:\workspace\eclipse\base\outputcontent\src\oc9\Bank.java
文件:D:\workspace\eclipse\base\outputcontent\src\user.info
遍历完毕!开始读取文件获取男员工信息写入文件...
读取并写入完毕...
打印名字中含有 小 的员工信息:
小李,18,男,20010123,8000
小萌,30,女,19900831,7000
打印完毕,程序结束!

执行完程序,刷新项目工程,就能看到 male.info 文件有了,打开就能看到所有的男性员工信息。

公众号有同期技能演示视频,大家可搜索并关注公众号 taishangcode 进行同步学习。

1-19 HashMap、IO流递归遍历文件实战相关推荐

  1. * IO流递归拷贝一个文件夹 按源文件夹格式拷贝

    import java.io.*;/*** IO流递归拷贝一个文件夹 按源文件夹格式拷贝** @author silence*/ public class IoCopy2 {private stati ...

  2. IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷

    import java.io.*;/*** IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹.如果重复不拷贝,可续拷* @author silence*/ public class IoCopy ...

  3. 递归遍历文件夹,并添加到TreeView控件中

    遍历文件夹,并把所有节点增加到TreeView控件中,这里单独写成了一个静态类,传入根目录节点和指定的目录这两个参数即可,可以稍作扩展用于其他方案 View Code 1 using System; ...

  4. Java File类应用:递归遍历文件夹和递归删除文件

    要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在若要删除正文文件夹,可以在递归删 ...

  5. python递归遍历目录_Python实现递归遍历文件夹并删除文件

    思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹 ...

  6. php递归获取文件夹,php递归遍历文件夹

    用递归实现遍历文件夹及其子目录 * ###什么是递归 **递归: 函数不断的调用函数,开辟内存: 是一种典型使用空间换时间的思想(突然间内存被大量占用,效率很高). 当一个函数是为了解决某一个问题的时 ...

  7. Java递归遍历文件夹

    好像没有什么可以描述的: 具体在代码中有注释 代码需要 自己优化,wo想象力有限┭┮﹏┭┮ Java递归遍历文件夹: 简单过程: 输入路径 判断是否可以递归(文件夹加入递归) 否则判断后缀 打印. 看 ...

  8. tf.io.gfile.glob 遍历文件

    tf.io.gfile.glob 遍历文件 import tensorflow as tf data_dir = 'data/mini_speech_commands' # 遍历文件夹data_dir ...

  9. python批量删除文件1001python批量删除文件_Python实现递归遍历文件夹并删除文件...

    思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹 ...

最新文章

  1. Cell子刊:中科院遗传发育所周俭民组发现特异靶向病原菌致病力的植物天然产物并阐明作用机制
  2. win7清除系统托盘图标的方法
  3. oracle查找重复记录
  4. Django学习笔记之模板渲染、模板语言、simple_tag、母版子版、静态配置文件
  5. VMware Workstation安装64位操作系统遇到的小问题
  6. 统计学习方法第九章作业:三硬币EM算法、GMM高维高斯混合模型 代码实现
  7. 485串口测试工具软件下载_串口调试助手详细讲解(结合实操),通讯问题不再是问题...
  8. 计算机网络最出优秀,职业高中计算机网络案优秀教案.doc
  9. 基于Unity官方素材开发的3D二人沙漠坦克大战
  10. mac安装win7之后鼠标失灵_苹果电脑安装win7时键盘鼠标无响应3种解决方案
  11. Hotelling T2检验和多元方差分析
  12. 三代测序数据分析实战
  13. Linux错误 “cp: omitting directory”解决办法
  14. 继电器在交流应用时的zero-crossing
  15. 学习QT之调色板(QPalette)
  16. “人生苦短,我用Python“——网络嗅探与欺骗
  17. 没有扫描仪如何用PS把照片处理成扫描文件
  18. Spring事务管理中异常回滚知识点总结
  19. 无线网卡驱动突然坏了怎么办
  20. 使用Cocos Creator制作试玩广告(PlayableAd)

热门文章

  1. 人与人之间的单机五子棋 —— C语言实现
  2. 最简单部署k8s集群(一)
  3. 本节作业之显示不同问候语、显示密码、关闭二维码、循环精灵图背景、显示隐藏文本框内容、密码框格式提示错误、京东关闭广告、新浪下拉菜单、开关灯、换肤、表格隔行变色、表单取消全选、tab栏切换、发布删除留言
  4. Sanic异步框架真的这么强吗?实践中找真理
  5. 关于 malloc 函数和free 函数
  6. 再见了,昔日的英雄们!
  7. websocket的一些应用
  8. MindMaster思维导图拖动(移动)和上下、左右滚动
  9. 选班长的问题?Java:解决循环报数
  10. python实现利用QQ群成员长截图抽签