Java读取文件分割字符串

1. 需求分析

前一段时间接到一个需求,传入一个txt文件,需要解析文件中的内容,读出指定的参数,写入map中。

1.1 首先看一下传入的文件格式

我截取了部分文档,可以看到文档是按行来解析的,这里就可以想到readLine()方法,再看每行有三个参数,需要把三个参数单独截取出来,赋值给不同的变量。

请添加图片描述

2.完成需求

2.1首先是读取文档,循环读出每一行

这里用的是BufferedReader()字符输入流

package com.example.station.service.impl;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderGantry {

    private static final Logger logger = LogManager.getLogger(BufferedReaderGantry.class);

    public static Map<String,Object> readFile(File filepath) {

        FileReader fr = null;//创建FileReader流
        BufferedReader br = null;//创建BufferedReader流
        try {
            fr = new FileReader(filepath);
            br = new BufferedReader(fr);
            String data = null;
            while((data = br.readLine()) != null){
                //循环读取每一行
            }

2.2第二步就是截取字符串,赋值给不同的变量了

while((data = br.readLine()) != null){
          String[] param = data.split("\\s+");
          String ID = param[0].trim();
          String StationID = param[1].trim();
          String LaneType = param[2].trim();
     }
2.2.1方法解析:
  • trim(): 删除字符串首部和尾部的空格,发生错误返回空字符串("");
  • split: 根据内容分割内容;
  • \s: \s代表空格,+代表多个空格
  • \t:这个虽然在里面没有使用到,但还是要提一下,这个代表table键

2.3最后就是加入map了,直接放上完整代码

3.完整代码

package com.example.station.service.impl;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;//这两个就是log4j的包

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class BufferedReaderGantry {

    private static final Logger logger = LogManager.getLogger(BufferedReaderGantry.class);//这个是log4j,用来记录日志,可以不写,要使用的话导入log4j依赖

    public static Map<String,Object> readFile(File filepath) {

        FileReader fr = null;
        BufferedReader br = null;
        Map<String,Object> map = null;
        try {
            map = new HashMap<>();
            fr = new FileReader(filepath);
            br = new BufferedReader(fr);//文件输入流
            String data = null;
            //读取每一行
            while((data = br.readLine()) != null){
            	//由于空格数不定,故按多个空格分隔每一行内容,并存入一个String类型数组里
                String[] param = data.split("\\s+");
                //读取数组,把分割到内容赋值给相应的变量
                String ID = param[0].trim();
                String StationID = param[1].trim();
                String LaneType = param[2].trim();
              
                //放入map中
                map.put("ID",ID);
                map.put("StationID",StationID);
                map.put("LaneType",LaneType);
            }
          //异常处理
        } catch (IOException e) {
            logger.error("",e);
        } finally {
            if (br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    logger.error("门架文件读取失败",e);
                }
            }
        }
        return map;
    }
    //这个是测试类,你可以自己造个文件,把完整文件路径放上去
    //上面没写System.out.println(),要打印的话自己写一下sout
    /*@Test
    public void testFile() throws IOException {
        File filepath = new File("/Users/mac/Desktop/Data/Bgantry.txt");
        BufferedReaderGantry.readFile(filepath);
    }*/
}

4.写在最后

这是debug后看到的解析结果,可以看到没得问题。
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值