java-实现修改文件内容(3)

本章节是java实现对文本数据的中间部分进行插入,文本数据集合插入,直接上代码把:

import org.apache.commons.io.IOUtils;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class ToDatasUtils {
    /**
     * 修改SM.dat、XE.dat中 1-10组棒位动态控制
     * @param path
     * @param list
     */
    public static void toWriteUserTab(String path, List<String> list){
        FileReader in  = null;
        LineNumberReader reader = null;
        File sourceFile = new File(path);
        // 内存流, 作为临时流
        CharArrayWriter tempStream = null;

        FileWriter out = null;
        try{
            if(!sourceFile.exists()){
                return;x
            }
            // 内存流, 作为临时流
            tempStream = new CharArrayWriter();
             in = new FileReader(sourceFile);
             reader = new LineNumberReader(in);
            String s = "";
            int dataIndex = 0;
            int lines = 0;
            while (s != null) {
                lines++;
                s = reader.readLine();

                if(lines <=  11){
                    // 将该行写入内存
                    tempStream.write(s);
                    // 添加换行符
                    tempStream.append(System.getProperty("line.separator"));
                }else {
                    //获取最后一部分开始的行数
                    if(s.contains("IMOV=")){
                        dataIndex = lines;
                        break;
                    }
                }
            }
            //将需要的几个写入txt中去
            for (String s1 : list) {
                tempStream.write(
                        "      "+s1+","
                );
                tempStream.append(System.getProperty("line.separator"));
            }
            lines = 0;
            s = "";
            in = new FileReader(sourceFile);
            reader = new LineNumberReader(in);
            while (s != null) {
                lines++;
                s = reader.readLine();
                if(lines >= dataIndex  && lines <= getFileLineNum(path)){
                    // 将该行写入内存
                    tempStream.write(s);
                    // 添加换行符
                    tempStream.append(System.getProperty("line.separator"));
                }
            }
            IOUtils.closeQuietly(reader);
            IOUtils.closeQuietly(in);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 将内存中的流 写入 文件
            try {
                out = new FileWriter(path);
                tempStream.writeTo(out);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                IOUtils.closeQuietly(out);
                IOUtils.closeQuietly(tempStream);

            }
        }
    }

    //获取文本最大行数
    public static long getFileLineNum(String filePath) {
        try {
            return Files.lines(Paths.get(filePath)).count();
        } catch (IOException e) {
            return -1;
        }
    }

    public static void main(String[] args) {
        List<String> dataList = new ArrayList<>();
        dataList.add("1*-100,-90,4*0");
        dataList.add("2*-100,-90,4*0");
        dataList.add("3*-100,-90,4*0");
        dataList.add("8*-100,-90,4*0");
        dataList.add("8*-100,-90,4*0");
        toWriteUserTab("C:\\Users\\lxp\\Desktop\\11\\SM.dat",dataList);
    }
}

结果图如下:分为3部分 中间是要插入的数据集合,第3部分以IMOV标识开始:

 

 测试后的结果:

 

posted @ 2020-07-11 16:23  执着的你  阅读(836)  评论(0编辑  收藏  举报