通过Stringbuffer实现io流读一行,行中位置的内容修改

来源:互联网 发布:知乎页面显示不正常 编辑:程序博客网 时间:2024/05/22 06:08

package cn.sos.until;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
* 随机改变参数0和1.并运行计算程序
* @author lannan
*
*/
public class Random {

/**
* 修改0和1,收集修改后的数据
* @param filePath
*/
public static List heel(String filePath){
BufferedReader br = null;

    String line = null;    List<String>list = new ArrayList<>();    StringBuffer buf = new StringBuffer();    try {        //根据文件路径创建缓冲输入流        br = new BufferedReader(new FileReader(filePath));        //循环读取文件的每一行,对需要进行修改的行进行修改,放入缓存对象中        while ((line = br.readLine()) != null) {            //此处根据实际需要修改某些行的内容            buf.append(" ").append(" ").append((int)(Math.random()*2)).append(line.substring(3));            //使用list记录所有的数据            list.add(buf.toString());            //System.out.println(buf.toString());            //清空可变字符串,重新记录数据            buf.delete(0, buf.length());        }    } catch (Exception e) {        e.printStackTrace();    }finally{        try {            br.close();        } catch (IOException e) {            e.printStackTrace();        }    }    return list;}/** * 修改参数,并收集修改后的文件数据集合 * @param filePath * @return */public static List<String> dynamoheel(String filePath){    BufferedReader br = null;    String line = null;    List<String>list = new ArrayList<>();    StringBuffer buf = new StringBuffer();    StringBuffer buf2 = new StringBuffer();    try {        //根据文件路径创建缓冲输入流        br = new BufferedReader(new FileReader(filePath));        //循环读取文件的每一行,对需要进行修改的行进行修改,放入缓存对象中        while ((line = br.readLine()) != null) {            //将读取的行写入stringbuffer中            buf.append(line);            float nm = (float)(Math.random()*9);//得到随机数,float是七位            buf2.append(nm);            //因为修改的位置有10位,空格+随机数+逗号  --因此随机数只能为八位            if (buf2.length()>8) {                buf2.delete(8, buf2.length());            }            //将随机数插入            buf.insert(20, (" "+buf2.toString()+","));            //将原有的数删除            buf.delete(30,40);            //使用list记录所有的数据            list.add(buf.toString());            //清空可变字符串,重新记录数据            buf.delete(0, buf.length());            buf2.delete(0, buf2.length());            思路:由于所需要的随机数为小数点后六位,因此通过Stringbuffer的delete方法去除六位之后的元素.          然后在通过delete方法把插入前的数据删除,这样就实现了文件内容读取行,行中位置的文件修改.          说白了就是通过Stringbuffer的insert和delete方法多次调用实现!        }    } catch (Exception e) {        e.printStackTrace();    }finally{        try {            br.close();        } catch (IOException e) {            e.printStackTrace();        }    }    return list;}/** * 将修改后的数据回写到文件中 * @param filePath:文件路径 * @param content:修改后的数据集合 */public static void writer(String filePath,List<String> content){    BufferedWriter bw = null;    try {        //根据文件路径创建缓冲输出流        bw = new BufferedWriter(new FileWriter(filePath));        //将内容写入到文件中        for (int i = 0; i < content.size(); i++) {            bw.write(content.get(i));            //换行            bw.newLine();        }    } catch (Exception e) {        e.printStackTrace();    }finally{        try {            bw.close();        } catch (IOException e) {            e.printStackTrace();        }    }}/** * 运行exe文件,进行计算 * 并一次计算完毕后自动关闭exe界面,结束线程(用于循环) * @param rnRuntime */public static void  test3(Runtime rnRuntime){    try {        Process p = rnRuntime.exec("D:\\wenjian\\电力psasp\\潮流作业1\\Temp\\wmlf.exe");        Thread.sleep(3000);        p.destroy();    } catch (Exception e) {        System.out.println("打开应用程序失败!");    }}

}

阅读全文
0 0
原创粉丝点击