当有多个txt文件需要解析数据,并将数插入数据库,可以按如下代码编写。
下面代码只需要文件路径,具体可按照实际需求操作。
代码如下:
import com.fin.util.JsonUtil;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
* 多个txt 文件解析并入库
*/
public class FileDemo {
static class Student {
String name;
int age;
String className;
String address;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setClassName(String className) {
this.className = className;
}
public void setAddress(String address) {
this.address = address;
}
}
static class FilePojo {
String filePath;
String fileName;
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
/**
* 多个txt文件解析入库
*/
public static void fileStored() {
//获取txt文件路径 TODO 可以根据实际业务去获取文件路径
List<FilePojo> fileList = new ArrayList<>();
FilePojo filePojo1 = new FilePojo();
filePojo1.setFilePath("D:\\h5\\FileDemo1.java");
FilePojo filePojo2 = new FilePojo();
filePojo2.setFilePath("D:\\h5\\FileDemo2.java");
fileList.add(filePojo1);
fileList.add(filePojo2);
System.out.println("打印文件路径集合:" + fileList);
// 循环,解析文件,插入数据库。
fileList.forEach(FileDemo::fileStoredParse);
}
/**
* 循环,解析文件,插入数据库。
*
* @param pojo 对象
*/
private static void fileStoredParse(FilePojo pojo) {
File file = new File(pojo.getFilePath());
if (!file.exists()) {
System.out.println("文件不存在,不进行文件入库操作!");
return;
}
//文件解析,并入库
readeFile(file.getPath());
}
/**
* 文件解析,并入库。每一千条数据 入库一次
* ★
* •每个域以|分隔
* • 文件以UTE-8编码
* aa|bbb|ccc|ddd|eee|ffff
*
* @param path 文件路径
*/
private static void readeFile(String path) {
System.out.println("打印文件路径:" + path);
ArrayList<Student> studentLsit = new ArrayList<>();
try {
FileInputStream ip = new FileInputStream(path);
InputStreamReader ir = new InputStreamReader(ip, "UTF-8");
BufferedReader br = new BufferedReader(ir);
{
String line = null;
String[] split;
boolean headFile = true; //跳过文件头
while (null != (line = br.readLine())) {
if (headFile) {
headFile = false;
continue;
}
split = line.split("\\|");
if (null != split && 0 < split.length) {
Student student = new Student();
student.setAddress(split[0]);
student.setAge(Integer.parseInt(split[1]));
student.setClassName(split[2]);
student.setName(split[3]);
studentLsit.add(student);
}
if (1000 == studentLsit.size()) {
// TODO 插入数据库
//清除list
studentLsit.clear();
System.out.println("每1000条数据入库一次");
}
}
}
//不足1000条入库
if (null != studentLsit || 0 < studentLsit.size()) {
// TODO 插入数据库
System.out.println("最后入库条数" + studentLsit.size());
}
} catch (Exception e) {
System.out.println(e);
//todo 抛错
// throw new Exception("文件解析入库有误!!!");
}
// finally {
// 不用 释放资源; 上面会自动释放。
// }
}
}
谢谢!