栈溢出了哪位大哥看看怎么解决

vxdvcv 2019-06-06 11:19:17
package com.hlsh.tool;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.hlsh.pojo.WellDynamics;
import com.hlsh.pojo.Welldaties;

/**
* 接受文件集合,根据文件名分析,--》对象集合
*
* @author Administrator
*/
public class AnalysFile {


private List<Welldaties> ls = new ArrayList<Welldaties>();//存放解析文件后的对象集合
private List<WellDynamics> lst = new ArrayList<WellDynamics>();//存放解析文件后的WellDynamics集合
private int index = 0; //全局变量--判断递归次数
private String wellName = null;//全局变量-油井名称

/**
* 递归方法去解析文件,把数据解析放入list<Welldaties>
* 接受文件集合,根据文件名分析
*
* @param files for (File file : files)在迭代集合时,并且对集合元素进行修改,
* 会报java.util.ConcurrentModificationException异常
*/
public List<Welldaties> analysFile(List<File> files) {
if (index == 0) {//递归第一次
wellName = this.anyalysisWellName(files);
}
if (files.size() > 0) {// 在文件部位null的情况下
File file1 = files.get(0); // 获取第一个文件
String[] fileNameFiled1 = spilt_file(file1.getName());// 把第一个文件名称截取成三段
String cstime = fileNameFiled1[1];
Welldaties welldaties = new Welldaties();// 创建实体对象
welldaties.setWellId(wellName);// 给对象设置井名
welldaties.setTimeStr(cstime);// 给对象设置测量时间
int index = 0;
File[] removeFiles = new File[4];//这个是每次循环要从文件夹中删除的文件
for (int i = 0; i < files.size(); i++) {// 循环其他文件
File file = files.get(i); // 获取文件
String path = "";// 文件路径
String[] fileNameFiled = spilt_file(file.getName());
if (cstime.equals(fileNameFiled[1]) && "couple".equals(fileNameFiled[2])) {// 接箍波形
// 读取文件
path = file.getAbsolutePath();// 获取文件路劲
String m = FileManager.readTxtFile(path);
welldaties.setCoupleWave(m); // 设置接箍波形的数据
index++; // 序列增加1
removeFiles[0] = file;
//files.remove(file); // 把这个文件从list集合中去掉
} else if (cstime.equals(fileNameFiled[1]) && "data".equals(fileNameFiled[2])) {// 基础数据
// 读取文件
path = file.getAbsolutePath();// 获取文件路劲
String m = FileManager.readTxtFile(path);
String[] datas = m.split(",", -1);
welldaties.setOilPos(Integer.parseInt(datas[0])); // 设置动液面的值
welldaties.setPressureVal(Double.parseDouble(datas[1])); // 设置套压的值
welldaties.setWaveSpeed2(Integer.parseInt(datas[2])); // 设置声速的值
welldaties.setFiled1(Integer.parseInt(datas[3].trim()));
// //设置接箍数的值
index++; // 序列增加1
removeFiles[1] = file;
//files.remove(file); // 把这个文件从list集合中去掉
} else if (cstime.equals(fileNameFiled[1]) && "filter".equals(fileNameFiled[2])) {// 滤波数据
// 读取文件
path = file.getAbsolutePath();// 获取文件路劲
String m = FileManager.readTxtFile(path);
welldaties.setFilteredData(m); // 设置滤波波形的数据
index++; // 序列增加1
removeFiles[2] = file;
//files.remove(file); // 把这个文件从list集合中去掉
} else if (cstime.equals(fileNameFiled[1]) && "dynaLoad".equals(fileNameFiled[2])) {// 载荷数据
// 读取文件
path = file.getAbsolutePath();// 获取文件路劲
String m = FileManager.readTxtFile(path);
welldaties.setOriData(m); // 设置原始波形的数据
index++; // 序列增加1
removeFiles[3] = file;
//files.remove(file); // 把这个文件从list集合中去掉
}
if (index == 4) {
ls.add(welldaties);// 把对象添加到集合中
break;
}
} // for循环
//删除已经检索到的文件夹
for (int j = 0; j < removeFiles.length; j++) {
files.remove(removeFiles[j]);
}
} else {
return ls;// 递归退出条件
}
index++;
return analysFile(files);
}
/**
* 解析载荷数据
*
* @param files
* @return
*/
public List<WellDynamics> analysFileDyna(List<File> files) {
if (index == 0) {//递归第一次
wellName = this.anyalysisWellName(files);//读取井名
}
if (files.size() > 0) {//
File file1 = files.get(0); // 获取第一个文件
String[] fileNameSegs = spilt_file(file1.getName());// 把第一个文件名称截取成三段
String cstime = fileNameSegs[1];
WellDynamics wellDynamics = new WellDynamics();// 创建实体对象
wellDynamics.setWellId(wellName);// 给对象设置井名
wellDynamics.setTimeStr(cstime);// 给对象设置测量时间
int index = 0;
File[] willRemoveFiles = new File[3];//这个是每次循环要从文件夹中删除的文件
int fz = files.size();
for (int i = 0; i < fz; i++) {// 循环其他文件
File file = files.get(i); // 获取文件
String path = "";// 文件路径
String[] fileNameFiled = spilt_file(file.getName());
if (cstime.equals(fileNameFiled[1]) && "displacement".equals(fileNameFiled[2])) {// 位移
// 读取文件
path = file.getAbsolutePath();// 获取文件路径
String m = FileManager.readTxtFile(path);
wellDynamics.setDisplacement(m); // 设置位移数据
index++;
willRemoveFiles[0] = file;
} else if (cstime.equals(fileNameFiled[1]) && "dynaLoad".equals(fileNameFiled[2])) {// 载荷
// 读取文件
path = file.getAbsolutePath();// 获取文件路径
String m = FileManager.readTxtFile(path);
wellDynamics.setDynaLoad(m);
index++; // 序列增加1
willRemoveFiles[1] = file;
} else if (cstime.equals(fileNameFiled[1]) && "dynaOpts".equals(fileNameFiled[2])) {// 冲程
// 读取文件
path = file.getAbsolutePath();// 获取文件路径
String m = FileManager.readTxtFile(path);
wellDynamics.setDynaOpts(m);
index++; // 序列增加1
willRemoveFiles[2] = file;
}
if (index == 3) {
lst.add(wellDynamics);// 把对象添加到集合中
break;
}
}
//删除已经检索到的文件夹
for (int j = 0; j < 3; j++) {
files.remove(willRemoveFiles[j]);
}
} else {
return lst;// 递归退出条件
}
index++;
return analysFileDyna(files);

}


/**
* 对文件名称进行分割
*
* @param fileName
* @return
*/
public String[] spilt_file(String fileName) {
String[] fileNameFiled = null;
if (fileName != null) {
fileNameFiled = fileName.split("_", -1);
}
return fileNameFiled;
}


/**
* 对文件进行检索,找到井名
*/
public String anyalysisWellName(List<File> files) {
String m = null;
int index = 0;
for (File file : files) {
if (file.getName().equals("oilWellName.txt")) {//是井名文件
m = FileManager.readTxtFile(file.getAbsolutePath()).trim();//去掉文件名称的空格
break;
}
index++;
}
files.remove(index);//删除井名文件
return m;
}


}
...全文
22 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧