gu123xin 2018-08-15 09:42 采纳率: 100%
浏览 1631
已采纳

java将一个文本的数据插入另一个文本的指定位置

现在有个问题,我有一个文本,上面的数据不全,需要将另外一个文本的数据插入,以id号的顺序插入
图片说明
上面的是不全的文本,下面的是需要插入的文本图片说明
最后是这样的图片说明,如果第一个文本,即不全的文本数据量比较大,还需要用上面方式来处理?

  • 写回答

8条回答 默认 最新

  • 张音乐 博客专家认证 2018-08-15 10:31
    关注
     package design;
    
    import org.yaml.snakeyaml.reader.UnicodeReader;
    
    import java.io.*;
    import java.util.*;
    
    public class ReadTxt {
    
        public static List<Map<String,String>> readFromLockingTxt(String fileName) {
            BufferedReader reader = null;
            List<Map<String,String>> mapList = new ArrayList<Map<String,String>>();
            try{
                FileInputStream fileInputStream = new FileInputStream(new File(fileName));
                UnicodeReader unicodeReader = new UnicodeReader(fileInputStream);
                reader = new BufferedReader(unicodeReader);
                String tempString = null;
                int line = 1;
                while ((tempString = reader.readLine()) != null) {
                    Map<String,String> map = new LinkedHashMap<String,String>();
                    System.out.println("line " + line + ": " + tempString);
                    tempString.trim();
                    if(line==1){
                        String [] strs = tempString.split("\\|");
                        map.put("id",strs[0].trim());
                        map.put("name",strs[1].trim());
                        map.put("pass",strs[2].trim());
                    }else{
                        //替换多个空格
                        String string = tempString.replaceAll(" {1,}", "");
                        String [] strs = string.split(",");
                        map.put("id",strs[0].trim());
                        map.put("name",strs[1].trim());
                        if(strs.length == 3){
                            map.put("pass",strs[2].trim());
                        }else{
                            map.put("pass","");
                        }
                    }
                    mapList.add(map);
                    line++;
                }
                reader.close();
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                if (reader != null){
                    try{
                        reader.close();
                    }catch (IOException e1){
                        e1.printStackTrace();
                    }
                }
            }
            return mapList;
        }
    
        public static Map<String,String> readFromKeyTxt(String fileName) {
            BufferedReader reader = null;
            Map<String,String> map = new LinkedHashMap<String,String>();
            try{
                FileInputStream fileInputStream = new FileInputStream(new File(fileName));
                UnicodeReader unicodeReader = new UnicodeReader(fileInputStream);
                reader = new BufferedReader(unicodeReader);
                String tempString = null;
                int line = 1;
                while ((tempString = reader.readLine()) != null) {
                    System.out.println("line " + line + ": " + tempString);
                    tempString.trim();
                    //替换多个空格
                    String string = tempString.replaceAll(" {1,}", "");
                    String [] strs = string.split(",");
                    map.put(strs[0].trim(),strs[1].trim());
                    line++;
                }
                reader.close();
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                if (reader != null){
                    try{
                        reader.close();
                    }catch (IOException e1){
                        e1.printStackTrace();
                    }
                }
            }
            return map;
        }
    
    
        public static void writeListToTxt(List<Map<String,String>> list,String fileName){
            StringBuilder sb = new StringBuilder();
            for(int i=0;i<list.size();i++){
                if(i==0){
                    sb.append(list.get(i).get("id")+"a\u007C"+list.get(i).get("name")+"a\u007C"+list.get(i).get("pass")).append("\r\n");
                }else{
                    sb.append(list.get(i).get("id")+","+list.get(i).get("name")+","+list.get(i).get("pass")).append("\r\n");
                }
            }
            try{
                FileWriter writer = new FileWriter(fileName);
                BufferedWriter bw = new BufferedWriter(writer);
                bw.write(sb.toString());
                bw.close();
                writer.close();
            }catch(Exception e){
                e.printStackTrace();
            }
    
        }
    
        public static boolean isEmpty(String s) {
            return ((s == null) || (s.length() == 0));
        }
    
    }
    
    
     package design;
    
    import java.io.File;
    import java.util.List;
    import java.util.Map;
    
    public class App {
        public static void main(String args[]){
    
            //读取缺失的文件
            List<Map<String,String>> lockMapList = ReadTxt.readFromLockingTxt("D:"+ File.separator+"workspace"+File.separator+"lacking.txt");
            System.out.println("修改前list为:"+lockMapList);
    
            //读取补充文件
            Map<String,String> keyMap = ReadTxt.readFromKeyTxt("D:"+ File.separator+"workspace"+File.separator+"key.txt");
            System.out.println("需要插入的文本为:"+keyMap);
    
            //组合成新的完整的list
    
            lockMapList.parallelStream().forEach(p->{
                if(ReadTxt.isEmpty(p.get("pass"))){
                    p.replace("pass",keyMap.get(p.get("id")));
                }
            });
            System.out.println("组合后list为:"+lockMapList);
    
            //重组完成后的List存储到txt文件
            ReadTxt.writeListToTxt(lockMapList,"D:"+ File.separator+"workspace"+File.separator+"whole.txt");
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 关于#vscode#的问题:ESP32开发板对接MQTT实现小灯泡的开关
  • ¥15 TMC2209串口模式下读取不到寄存器的值串口助手蓝色字体是发过去的消息,绿色字体是收到的消息,第二行发送读取寄存器的指令但是没有读取到寄存器的值串口助手如下图:接线如下图,如何解决?
  • ¥15 高通安卓11提取完整线刷包软件,或者优博讯dt50顺丰刷机包
  • ¥20 C,有个译码器,换了信道就跑不出原来数据
  • ¥15 MIMIC数据库安装问题
  • ¥60 基于JTag协议开发Fpga下载器上位机,哪位大🐂有偿指导?
  • ¥20 全书网Java爬取数据
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏