gu123xin 2018-08-06 09:04 采纳率: 95.2%
浏览 2319
已采纳

java需要从.txt文本里读取特定的字段,并写入另一个.txt

读取之前图片说明
读取之后图片说明
a,b,c,....e是表示标签,先的是数据,我需要读取特定标签下面的数据,麻烦写个代码,谢谢,我刚学java,超级菜鸟,别嘲笑,现在力求进步,谢谢大佬们,运行成功,就给币。

  • 写回答

9条回答 默认 最新

  • batter少年 2018-08-06 10:09
    关注
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class TestAAA {
    
        public static void main(String[] args) throws Exception {
            File file = new File("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\新建文本文档1.txt")),"UTF-8"));
            String[] strs = {"a", "b", "d", "e"};//要读的标签
            int num[] = new int[strs.length];//每个标签的位置
            String[] left = new String[strs.length];
            String[] right = new String[strs.length];
            BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream),5*1024*1024);
            String line = null;
            if((line = reader.readLine()) != null) {
                String[] infoArraay = line.split(" ");
                for (int i = 0; i < strs.length; i++) {
                    for (int j = 0; j < infoArraay.length; j++) {
                        int begin = 0;
                        if((begin=infoArraay[j].indexOf(strs[i]))!=-1) {
                            num[i] = j;
                            String leftStr = infoArraay[j].substring(0, begin);;
                            String rightStr = infoArraay[j].substring(begin+strs[i].length()-1, infoArraay[j].length()-1);
                            left[i] = leftStr;
                            right[i] = rightStr;
                            writer.write(infoArraay[j]+" ");
                            break;
                        }
                    }
                }
                writer.newLine();
            }
            while((line = reader.readLine()) != null) {//逐行的读
                String[] infoArraay = line.split(" ");
                String str = "";
                for (int i = 0; i < num.length; i++) {
                    str += infoArraay[num[i]].replace(left[i], "").replace(right[i], "")+",";
                }
                str = str.substring(0, str.length()-1);
                writer.write(str);
                writer.newLine();
            }
            reader.close();
            writer.close();
        }
    }
    

    改了下,你试试
    运行前
    a b c d .....e.....
    a1 b1 c1 d1 .....e1.....
    a2 b2 c2 d2 .....e2.....
    a3 b3 c3 d3 .....e3.....
    a4 b4 c4 d4 .....e4.....
    a5 b5 c5 d5 .....e5.....
    a6 b6 c6 d6 .....e6.....
    a7 b7 c7 d7 .....e7.....
    a8 b8 c8 d8 .....e8.....
    a9 b9 c9 d9 .....e9.....
    运行后
    a b d e
    a1,b1,d1,e1
    a2,b2,d2,e2
    a3,b3,d3,e3
    a4,b4,d4,e4
    a5,b5,d5,e5
    a6,b6,d6,e6
    a7,b7,d7,e7
    a8,b8,d8,e8
    a9,b9,d9,e9

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛