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;
Listlist = 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 dynamoheel(String filePath){
BufferedReader br = null;
String line = null;
Listlist = 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 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("打开应用程序失败!");
}
}
}