解析.txt文件入库

前段时间遇到这样需求,需要从文件夹中读取.txt文件按照一定规则解析入库,并且在tomcat开启时,开5个线程共同去解析文件入库

解析代码如下:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.hrtel.analyzeMR.entity.XDR_General_purpose;
import com.hrtel.analyzeMR.entity.XDR_HTTP;
import com.hrtel.analyzeMR.entity.XDR_Instant_Communication;
import com.hrtel.analyzeMR.entity.XDR_S1_MME;
import com.hrtel.analyzeMR.entity.XDR_VoIP;
import com.hrtel.analyzeMR.service.AnalyzeXdrService;

public class AnalyzeXdrController {
	//在springmvc中非controller类中调用service接口,以获取springmvc容器方法实现
	ApplicationContext ac = new ClassPathXmlApplicationContext("spring-mybatis.xml");
	AnalyzeXdrService analyzeXdrService = (AnalyzeXdrService) ac.getBean("analyzeXdrService");
	
	/**
	 * 启动一个线程,定时去读取文件
	 * ScheduledExecutorService定时周期执行指定任务
	 */
	public void realTimeCommunication(){
		ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
		//启动一个线程每10秒钟调用一次读取文件的方法
		exec.scheduleWithFixedDelay(new Runnable(){
			public void run(){
				readInstantCommunication();
			}
		},0, 10, TimeUnit.SECONDS);
	}
	
	public void realTimeMmeXdr(){
		ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
		//启动一个线程每10秒钟调用一次读取文件的方法
		exec.scheduleWithFixedDelay(new Runnable(){
			public void run(){ 
				readSMmeXdr();
			}
		},0, 10, TimeUnit.SECONDS);
	}
	
	public void realTimeHttpXdr(){
		ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
		//启动一个线程每10秒钟调用一次读取文件的方法
		exec.scheduleWithFixedDelay(new Runnable(){
			public void run(){
				readHttpXdr();
			}
		},0, 10, TimeUnit.SECONDS);
	}
	
	public void realTimeVoipXdr(){
		ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
		//启动一个线程每10秒钟调用一次读取文件的方法
		exec.scheduleWithFixedDelay(new Runnable(){
			public void run(){
				readVoipXdr();
			}
		},0, 10, TimeUnit.SECONDS);
	}
	
	public void realTimePurposeXdr(){
		ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
		//启动一个线程每10秒钟调用一次读取文件的方法
		exec.scheduleWithFixedDelay(new Runnable(){
			public void run(){
				readGeneralPurposeXdr();
			}
		},0, 10, TimeUnit.SECONDS);
	}
	
	/**
	 * 解析即时通信
	 */
	public void  readInstantCommunication(){
		BufferedReader br;
		InputStreamReader inputStreamReader;
		FileInputStream fileInputStream;
		
//		String uri = "E:/xdr/jishitongxin";
		String uri = "/sdb/xdr_msg";
		List<XDR_Instant_Communication>	list = new ArrayList<XDR_Instant_Communication>();
		//计时
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS");   
		TimeZone t = sdf.getTimeZone();   
		t.setRawOffset(0);   
		sdf.setTimeZone(t);   
		Long startTime = System.currentTimeMillis();  
		//计时
		
		File mrefile = new File(uri);   
		File[] array = mrefile.listFiles();
		 for(int i=0;i<array.length;i++){
			 File file = array[i];
			 String inFileName = array[i].getPath();
			 System.out.println("路径"+inFileName);
			 try {
					fileInputStream = new FileInputStream(inFileName);
					inputStreamReader =new InputStreamReader(fileInputStream);
					br = new BufferedReader(inputStreamReader);
					String line = "";
						while((line=br.readLine())!=null){
							String[] str = line.split("\\|");
							if(str.length == 56){
								XDR_Instant_Communication  ic = new XDR_Instant_Communication(str[0],str[1],str[2], str[3], str[4], str[5], str[6], str[7], str[8], str[9], str[10], str[11], str[12], str[13], str[14], 
										str[15], str[16], str[17], str[18], str[19], str[20], str[21], str[22], str[23], str[24], str[25], str[26], str[27], str[28], str[29], str[30], str[31], str[32], str[33], 
										str[34], str[35], str[36], str[37], str[38
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java 有很多可以解析文本文件的库和工具,比如 Apache Commons CSV 和 OpenCSV,但是如果你的文本文件比较简单,只需要读取每一行并将其插入数据库中,可以使用 Java 的 IO 和 JDBC API 来实现。 以下是一个简单的 Java 代码示例,演示了如何读取文本文件,将每一行拆分为字段,并将它们插入到数据库中: ```java import java.io.BufferedReader; import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class TextFileParser { public static void main(String[] args) { String fileName = "/path/to/your/text/file.txt"; String dbUrl = "jdbc:mysql://localhost:3306/mydatabase"; String dbUser = "myuser"; String dbPassword = "mypassword"; try (BufferedReader br = new BufferedReader(new FileReader(fileName)); Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable (col1, col2, col3) VALUES (?, ?, ?)")) { String line; while ((line = br.readLine()) != null) { String[] fields = line.split(","); pstmt.setString(1, fields[0]); pstmt.setString(2, fields[1]); pstmt.setString(3, fields[2]); pstmt.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们首先定义了要解析的文本文件的路径和数据库连接信息。然后,我们使用 BufferedReader 从文本文件中逐行读取数据,并将每一行拆分为字段。接下来,我们使用 JDBC API 将这些字段插入到数据库表中。 请注意,上面的代码仅用于演示目的,实际情况下你需要根据自己的需求进行修改和完善。例如,你可能需要处理异常、验证字段、使用预处理语句等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值