简单的java解析文本文件批量导入数据库

合集下载

java处理Txt文件并且存入数据库

java处理Txt文件并且存入数据库

java处理Txt⽂件并且存⼊数据库 txt⽂件是存储在电脑上,思路是: 先将txt按照每⼀⾏读取,将读到的⽂件存在list数据中。

然后每次循环将list的每⼀个数据进⾏按照你的条件拆分,我是按照“,”进⾏拆分的。

先看⼀下我的txt⽂件:这是拆分后的结果:package com.mysql;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.Locale;import com.service.MessageService;import .apache.xerces.internal.impl.xpath.regex.ParseException;public class testmysql {public static ArrayList<String> getfile(String filepath){try{String temp = null;File f = new File(filepath);//指定读取编码⽤于读取中⽂InputStreamReader read = new InputStreamReader(new FileInputStream(f),"utf-8");ArrayList<String> readList = new ArrayList<String>();BufferedReader reader=new BufferedReader(read);//bufReader = new BufferedReader(new FileReader(filepath));while((temp=reader.readLine())!=null &&!"".equals(temp)){readList.add(temp);}read.close();return readList;}catch (Exception e) {e.printStackTrace();}return null;}//改变时间的格式public static String parseDate(String dateStr) throws java.text.ParseException{SimpleDateFormat input_date = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.ENGLISH); SimpleDateFormat output_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String finalDate = "";try {Date parse_date = input_date.parse(dateStr);finalDate = output_date.format(parse_date);} catch (ParseException e) {e.printStackTrace();}return finalDate;}public static void main(String[] args) throws java.text.ParseException {//txt⽂件读取ArrayList<String> list=getfile("D:\\result.txt");//List<String> list1=new ArrayList<String>();int num=list.size();for (int i = 0; i < num; i++) {//System.out.println(list.get(i));if (list.get(i)!=null) {String[] s=list.get(i).split(",");String data=parseDate(s[1]);//txt每⾏可以分割成6个字符串存到是s[],String sql = "insert into detailresult(ip,time,day,traffic,type,id) values('" + s[0] + "','" +data+ "','" +s[2] + "','" + s[3] +"','" + s[4] +"','" + s[5] + "')";MessageService.add(sql);}}System.out.println("添加成功");}}。

Java一次性读取或者写入文本文件所有内容

Java一次性读取或者写入文本文件所有内容

Java⼀次性读取或者写⼊⽂本⽂件所有内容⼀次性读取⽂本⽂件所有内容我们做⽂本处理的时候的最常⽤的就是读写⽂件了,尤其是读取⽂件,不论是什么⽂件,我都倾向于⼀次性将⽂本的原始内容直接读取到内存中再做处理,当然,这需要你有⼀台⼤内存的机器,内存不够者……可以⼀次读取少部分内容,分多次读取。

读取⽂件效率最快的⽅法就是⼀次全读进来,很多⼈⽤readline()之类的⽅法,可能需要反复访问⽂件,⽽且每次readline()都会调⽤编码转换,降低了速度,所以,在已知编码的情况下,按字节流⽅式先将⽂件都读⼊内存,再⼀次性编码转换是最快的⽅式,典型的代码如下:public String readToString(String fileName) {String encoding = "UTF-8";File file = new File(fileName);Long filelength = file.length();byte[] filecontent = new byte[filelength.intValue()];try {FileInputStream in = new FileInputStream(file);in.read(filecontent);in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try {return new String(filecontent, encoding);} catch (UnsupportedEncodingException e) {System.err.println("The OS does not support " + encoding);e.printStackTrace();return null;}}⼀次性写⼊⽂本⽂件所有内容/*** ⼀次性写⼊⽂本⽂件所有内容** @param fileName* @param content*/public static void saveStringTOFile(String fileName, String content){FileWriter writer=null;try {writer = new FileWriter(new File(fileName));writer.write(content);} catch (IOException e) {// TODO ⾃动⽣成的 catch 块e.printStackTrace();} finally {try {writer.close();} catch (IOException e) {// TODO ⾃动⽣成的 catch 块e.printStackTrace();}}System.out.println("写⼊成功!!!");}。

java读取excel文件数据导入mysql数据库

java读取excel文件数据导入mysql数据库

java读取excel⽂件数据导⼊mysql数据库这是我来公司的第⼆周的⼀个⼩学习任务,下⾯是实现过程:1.建⽴maven⼯程(⽅便管理jar包)在pom.xml导⼊ jxl,mysql-connector 依赖可以在maven仓库搜索2.建⽴数据库连接类,数据库对应实体类2.编写数据库表对应的实体类,get、set⽅法等3.下⾯是编写读取excel⽂件的类,和运⾏主类package service;import java.io.File;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import jxl.Sheet;import jxl.Workbook;import excel.DB;import excel.Student;public class StudentService {/*** 查询Student表中所有的数据* @return*/public static List<Student> getAllByDb(){List<Student> list=new ArrayList<Student>();try {DB db=new DB();String sql="select * from student";ResultSet rs= db.Search(sql, null);while (rs.next()) {int id=rs.getInt("id");String s_name=rs.getString("s_name");String age=rs.getString("age");String address=rs.getString("address");list.add(new Student(id, s_name, age,address));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return list;}/*** 查询指定⽬录中电⼦表格中所有的数据* @param file ⽂件完整路径* @return*/public static List<Student> getAllByExcel(String file){List<Student> list=new ArrayList<Student>();try {Workbook rwb=Workbook.getWorkbook(new File("F:\\student.xls"));Sheet rs=rwb.getSheet(0);//表int clos=rs.getColumns();//得到所有的列int rows=rs.getRows();//得到所有的⾏System.out.println("表的列数:"+clos+" 表的⾏数:"+rows);for (int i = 1; i < rows; i++) {for (int j = 0; j < clos; j++) {//第⼀个是列数,第⼆个是⾏数String id=rs.getCell(j++, i).getContents();//默认最左边编号也算⼀列所以这⾥得j++ String s_name=rs.getCell(j++, i).getContents();String age=rs.getCell(j++, i).getContents();String address=rs.getCell(j++, i).getContents();System.out.println("id:"+id+" name:"+s_name+" sex:"+age+" address:"+address); list.add(new Student(Integer.parseInt(id), s_name,age,address));}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return list;}/*** 通过Id判断是否存在* @param id* @return*/public static boolean isExist(int id){try {DB db=new DB();ResultSet rs=db.Search("select * from student where id=?", new String[]{id+""});if (rs.next()) {return true;}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return false;}public static void main(String[] args) {System.out.println(isExist(1));}}运⾏主类:package service;import java.util.List;import excel.DB;import excel.Student;public class TestExcelToDb {public static void main(String[] args) {//得到表格中所有的数据List<Student> listExcel=StudentService.getAllByExcel("F:\\student.xls");DB db=new DB();for (Student student : listExcel) {int id=student.getId();System.out.println(id);if (!StudentService.isExist(id)) {//不存在就添加String sql="insert into student (id,s_name,age,address) values(?,?,?,?)";String[] str=new String[]{id+"",student.getS_name(),student.getAge(),student.getAddress()+""};db.AddU(sql, str);}else {//存在就更新String sql="update student set s_name=?,age=?,address=? where id=?";String[] str=new String[]{student.getS_name(),student.getAge(),student.getAddress()+"",id+""};db.AddU(sql, str);}}}}数据库截图:[Excel数据表头要与数据库字段对应]总结:以上是使⽤了 jxl实现的读取excel⽂件内容,并且将数据传到mysql,缺陷是:jxl仅⽀持EXCEL2003。

java excel导入解析

java excel导入解析

java excel导入解析Java Excel导入解析:实现数据批量处理的利器在如今信息爆炸的时代,大量的数据需要被快速导入和解析,这就要求我们寻找高效的工具来处理这些数据。

而Java语言作为一种广泛使用的编程语言,其强大的功能和丰富的类库使得它成为了数据处理的首选。

本文将介绍如何使用Java语言来实现Excel的导入解析,从而实现数据的批量处理。

一、背景介绍Excel作为一种常见的办公软件,被广泛用于存储和处理各种数据。

然而,当数据量较大时,手动操作显然是不现实的,因此我们需要通过编程的方式来实现对Excel数据的导入和解析。

二、Excel导入解析的基本原理1. 导入Excel数据Java语言提供了丰富的类库,其中包括了用于解析Excel文件的类库。

我们可以使用Apache POI或JExcel等类库来实现对Excel 文件的读取和导入。

通过这些类库,我们可以将Excel文件中的数据读取到Java程序中,从而实现数据的导入。

2. 解析Excel数据导入Excel数据后,我们需要对数据进行解析,以便进行后续的处理。

通常情况下,Excel文件中的数据是以表格的形式存储的,我们可以通过遍历表格的行和列来获取数据。

在遍历过程中,我们可以根据需要对数据进行处理,比如筛选特定条件下的数据、计算数据的统计信息等。

三、Excel导入解析的具体实现步骤1. 引入类库在开始编写Java程序之前,我们需要先引入相关的类库。

以Apache POI为例,我们可以通过Maven等方式将其引入到项目中。

2. 创建工作簿在导入Excel文件之前,我们需要先创建一个工作簿对象,用于表示Excel文件。

可以通过WorkbookFactory类的静态方法来创建工作簿对象。

例如:```javaWorkbook workbook = WorkbookFactory.create(new File("data.xlsx"));```3. 获取工作表工作簿中包含了多个工作表,我们需要根据需要选择特定的工作表进行操作。

java操作txt或xls文件批量导入数据

java操作txt或xls文件批量导入数据

// db.insertDB(FltNum); // } } @SuppressWarnings("static-access") public String[] generateSql(String userName) throws IOException{ StringBuffer sbf = new StringBuffer(); String[] str = new String[2]; String uuid = UUIDUtil.getUUID(); sbf.append("insert into user values('"+uuid+"','" + userName +"','"+default_password+"',"+Constants.ENABLED+","+Constants.NUllDELETE+","+Constants.AUDITING+",'"+uuid+" @','"+formatDateTime()+"',"+Constants.REGEDIT_USER+");/n"); sbf.append("insert into users values('"+uuid+"',"+ null+","+Constants.MALE+","+null+","+null+",'60.176.36.250','"+formatDateTime()+"',"+null+","+null+","+null+","+null+" ,"+null+","+null+",0,"+null+","+null+",0,0,0,'"+formatDateTime()+"','1036',0,"+null+","+null+","+null+","+null+","+null+",'1 1',"+null+","+null+","+null+","+null+","+null+");/n"); sbf.append("insert into user_user_group values('"+uuid+"','"+ uuid +"','"+Constants.PERSONAL_USER+"');/n"); UUID = uuid; str[0]=sbf.toString(); str[1]=UUID; return str; } public String formatDateTime(){ Date date = new Date(); /** * 时间格式化 2009-12-31 09:04:31 */ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(date)); return sdf.format(date); } private String tranStr(String oldstr) { String newstr = ""; try { newstr = new String(oldstr.getBytes("ISO-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return newstr; } public static boolean isNumeric(String str){ Pattern pattern = pile("[0-9]*"); return pattern.matcher(str).matches(); } public static boolean isTwoCharacter(String str){

基于java对doc文档的分词,导入数据库

基于java对doc文档的分词,导入数据库

基于java对doc⽂档的分词,导⼊数据库这篇word⽂档都是正规的⽂本⽂字,有⼀定的格式,其中没有图⽚等难以处理的内容我也是刚学习对word⽂档的处理,其中也有很对不懂的地⽅Apache POI是的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

1、⾸先我下载了poi的包 /download.html ⽹址2、然后就是利⽤函数对⽂档的处理读取doc⽂档public static String contextOfDoc(File file) {String str = "";try {FileInputStream fis = new FileInputStream(file);HWPFDocument doc = new HWPFDocument(fis);str = doc.getDocumentText();doc.close();fis.close();} catch (Exception e) {e.printStackTrace();// TODO: handle exception}return str;}测试public static void main(String[] args) {File file = new File("src/1.doc");String str = contextOfDoc(file);String[] arr = str.split("\r");for (int i = 9; i < 284; i++) {System.out.println(arr[i]);}}先切分⽂档,分为⽬录和内容public static String[] cataAndContext() {File file = new File("src/1.doc");String textAll = docIo.contextOfDoc(file);String[] str = textAll.split("第五篇");return str;}对⽬录和内容分别切分public static List<String> typePart(String str) {//File file = new File("src/1.doc");//all//String textAll = docIo.contextOfDoc(file);String[] partOne = str.split("新技术篇");//第⼀篇到⽬录String partOneCatalog = partOne[1].split("⽹络安全篇")[0];String partNest = partOne[1].split("⽹络安全篇")[1];//第⼆篇⽬录String partTowCatalog = partNest.split("基础篇")[0];partNest = partNest.split("基础篇")[1];//第三篇⽬录String partThreeCatalog = partNest.split("国家信息化政策规划篇")[0];partNest = partNest.split("国家信息化政策规划篇")[1];//第四篇⽬录String partForeCatalog = partNest.split("附录")[0];List<String> strList = new ArrayList<>();strList.add(partOneCatalog);strList.add(partTowCatalog);strList.add(partThreeCatalog);strList.add(partForeCatalog);return strList;}对内容的处理public static void main(String[] args) throws Exception {FileInputStream fis = new FileInputStream("src/3.doc");WordExtractor wordExtractor = new WordExtractor(fis);String[] paragraphs = wordExtractor.getParagraphText();List<String> lists = getParas(paragraphs);CRUD c = new CRUD();List<String> catas = c.getCatalogs();for (int i = 0; i < catas.size()-1; i++) {String context = getContext(catas.get(i), catas.get(i+1), lists);c.insertContext(catas.get(i), context);}}public static String getContext(String start,String end,List<String> paras) { String context = "";for (int i = 0; i < paras.size(); i++) {if (paras.get(i).equals(start)) {for (int j = i+1; j < paras.size(); j++) {if(paras.get(j).equals(end)) {return context;}context = context + paras.get(j);}}}return context;}public static List<String> getParas(String[] paras) {List<String> paraList = new ArrayList<>();for (int i = 289; i < paras.length; i++) {paraList.add(paras[i].trim());}return paraList;}数据库的crudpublic List<String> getCatalogs(){List<String> lists = new ArrayList<>();Connection connection = Dbuitl.getConnection();String sql = "select catalog from catalogs";PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {Statement statement = connection.createStatement();resultSet = statement.executeQuery(sql);while (resultSet.next()) {lists.add(resultSet.getString("catalog"));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {Dbuitl.close(preparedStatement);Dbuitl.close(connection);}return lists;}public void insert(String type,String cata) {Connection connection = Dbuitl.getConnection();String sql = "insert into catalogs(type,catalog) value(?,?)";PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, type);preparedStatement.setString(2, cata);preparedStatement.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {Dbuitl.close(preparedStatement);Dbuitl.close(connection);}}public void insertContext(String catalog,String context) {Connection connection = Dbuitl.getConnection();String sql = "insert into context(catalog,context) value(?,?)"; PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, catalog);preparedStatement.setString(2, context);preparedStatement.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {Dbuitl.close(preparedStatement);Dbuitl.close(connection);}}public void insertSheet(String sheet,String type) {Connection connection = Dbuitl.getConnection();String sql = "insert into sheet(sheet,type) value(?,?)";PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, sheet);preparedStatement.setString(2, type);preparedStatement.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {Dbuitl.close(preparedStatement);Dbuitl.close(connection);}}。

Java实现批量导入excel表格数据到数据库中的方法

Java实现批量导入excel表格数据到数据库中的方法

Java实现批量导⼊excel表格数据到数据库中的⽅法本⽂实例讲述了Java实现批量导⼊excel表格数据到数据库中的⽅法。

分享给⼤家供⼤家参考,具体如下:1、创建导⼊抽象类package mon.excel;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.PrintStream;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder.SheetRecordCollectingListener;import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;import org.apache.poi.hssf.eventusermodel.HSSFListener;import org.apache.poi.hssf.eventusermodel.HSSFRequest;import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;import stCellOfRowDummyRecord;import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;import org.apache.poi.hssf.model.HSSFFormulaParser;import org.apache.poi.hssf.record.BOFRecord;import org.apache.poi.hssf.record.BlankRecord;import org.apache.poi.hssf.record.BoolErrRecord;import org.apache.poi.hssf.record.BoundSheetRecord;import org.apache.poi.hssf.record.FormulaRecord;import belRecord;import belSSTRecord;import org.apache.poi.hssf.record.NoteRecord;import org.apache.poi.hssf.record.NumberRecord;import org.apache.poi.hssf.record.RKRecord;import org.apache.poi.hssf.record.Record;import org.apache.poi.hssf.record.SSTRecord;import org.apache.poi.hssf.record.StringRecord;import ermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;/*** 导⼊抽象类* Created by charlin on 2017/9/7.*/public abstract class HxlsAbstract implements HSSFListener {private int minColumns;private POIFSFileSystem fs;private PrintStream output;private int lastRowNumber;private int lastColumnNumber;/** Should we output the formula, or the value it has? */private boolean outputFormulaValues = true;/** For parsing Formulas */private SheetRecordCollectingListener workbookBuildingListener;private HSSFWorkbook stubWorkbook;// Records we pick up as we processprivate SSTRecord sstRecord;private FormatTrackingHSSFListener formatListener;/** So we known which sheet we're on */private int sheetIndex = -1;private BoundSheetRecord[] orderedBSRs;@SuppressWarnings("unchecked")private ArrayList boundSheetRecords = new ArrayList();// For handling formulas with string resultsprivate int nextRow;private int nextColumn;private boolean outputNextStringRecord;private int curRow;private List<String> rowlist;@SuppressWarnings( "unused")private String sheetName;public HxlsAbstract(POIFSFileSystem fs)throws SQLException {this.fs = fs;this.output = System.out;this.minColumns = -1;this.curRow = 0;this.rowlist = new ArrayList<String>();}public HxlsAbstract(String filename) throws IOException,FileNotFoundException, SQLException {this(new POIFSFileSystem(new FileInputStream(filename)));}//excel记录⾏操作⽅法,以⾏索引和⾏元素列表为参数,对⼀⾏元素进⾏操作,元素为String类型// public abstract void optRows(int curRow, List<String> rowlist) throws SQLException ;//excel记录⾏操作⽅法,以sheet索引,⾏索引和⾏元素列表为参数,对sheet的⼀⾏元素进⾏操作,元素为String类型 public abstract void optRows(int sheetIndex,int curRow, List<String> rowlist) throws Exception;/*** 遍历 excel ⽂件*/public void process() throws IOException {MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);formatListener = new FormatTrackingHSSFListener(listener);HSSFEventFactory factory = new HSSFEventFactory();HSSFRequest request = new HSSFRequest();if (outputFormulaValues) {request.addListenerForAllRecords(formatListener);} else {workbookBuildingListener = new SheetRecordCollectingListener(formatListener);request.addListenerForAllRecords(workbookBuildingListener);}factory.processWorkbookEvents(request, fs);}/*** HSSFListener 监听⽅法,处理 Record*/@SuppressWarnings("unchecked")public void processRecord(Record record) {int thisRow = -1;int thisColumn = -1;String thisStr = null;String value = null;switch (record.getSid()) {case BoundSheetRecord.sid:boundSheetRecords.add(record);break;case BOFRecord.sid:BOFRecord br = (BOFRecord) record;//进⼊sheetif (br.getType() == BOFRecord.TYPE_WORKSHEET) {// Create sub workbook if requiredif (workbookBuildingListener != null && stubWorkbook == null) {stubWorkbook = workbookBuildingListener.getStubHSSFWorkbook();}// Works by ordering the BSRs by the location of// their BOFRecords, and then knowing that we// process BOFRecords in byte offset ordersheetIndex++;if (orderedBSRs == null) {orderedBSRs = BoundSheetRecord.orderByBofPosition(boundSheetRecords);}sheetName = orderedBSRs[sheetIndex].getSheetname();}break;case SSTRecord.sid:sstRecord = (SSTRecord) record;break;case BlankRecord.sid:BlankRecord brec = (BlankRecord) record;thisRow = brec.getRow();thisColumn = brec.getColumn();thisStr = "";break;case BoolErrRecord.sid:BoolErrRecord berec = (BoolErrRecord) record;thisRow = berec.getRow();thisColumn = berec.getColumn();thisStr = "";break;case FormulaRecord.sid:FormulaRecord frec = (FormulaRecord) record;thisRow = frec.getRow();thisColumn = frec.getColumn();if (outputFormulaValues) {if (Double.isNaN(frec.getValue())) {// Formula result is a string// This is stored in the next recordoutputNextStringRecord = true;nextRow = frec.getRow();nextColumn = frec.getColumn();} else {thisStr = formatListener.formatNumberDateCell(frec);}} else {thisStr = '"' + HSSFFormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';}break;case StringRecord.sid:if (outputNextStringRecord) {// String for formulaStringRecord srec = (StringRecord) record;thisStr = srec.getString();thisRow = nextRow;thisColumn = nextColumn;outputNextStringRecord = false;}break;case LabelRecord.sid:LabelRecord lrec = (LabelRecord) record;curRow = thisRow = lrec.getRow();thisColumn = lrec.getColumn();value = lrec.getValue().trim();value = value.equals("")?" ":value;this.rowlist.add(thisColumn, value);break;case LabelSSTRecord.sid:LabelSSTRecord lsrec = (LabelSSTRecord) record;curRow = thisRow = lsrec.getRow();thisColumn = lsrec.getColumn();if (sstRecord == null) {rowlist.add(thisColumn, " ");} else {value = sstRecord.getString(lsrec.getSSTIndex()).toString().trim();value = value.equals("")?" ":value;rowlist.add(thisColumn,value);}break;case NoteRecord.sid:NoteRecord nrec = (NoteRecord) record;thisRow = nrec.getRow();thisColumn = nrec.getColumn();// TODO: Find object to match nrec.getShapeId()thisStr = '"' + "(TODO)" + '"';break;case NumberRecord.sid:NumberRecord numrec = (NumberRecord) record;curRow = thisRow = numrec.getRow();thisColumn = numrec.getColumn();value = formatListener.formatNumberDateCell(numrec).trim();value = value.equals("")?" ":value;// Formatrowlist.add(thisColumn, value);break;case RKRecord.sid:RKRecord rkrec = (RKRecord) record;thisRow = rkrec.getRow();thisColumn = rkrec.getColumn();thisStr = '"' + "(TODO)" + '"';break;default:break;}// 遇到新⾏的操作if (thisRow != -1 && thisRow != lastRowNumber) {lastColumnNumber = -1;}// 空值的操作if (record instanceof MissingCellDummyRecord) {MissingCellDummyRecord mc = (MissingCellDummyRecord) record;curRow = thisRow = mc.getRow();thisColumn = mc.getColumn();rowlist.add(thisColumn," ");}// 如果遇到能打印的东西,在这⾥打印if (thisStr != null) {if (thisColumn > 0) {output.print(',');}output.print(thisStr);}// 更新⾏和列的值if (thisRow > -1)lastRowNumber = thisRow;if (thisColumn > -1)lastColumnNumber = thisColumn;// ⾏结束时的操作if (record instanceof LastCellOfRowDummyRecord) {if (minColumns > 0) {// 列值重新置空if (lastColumnNumber == -1) {lastColumnNumber = 0;}}// ⾏结束时,调⽤ optRows() ⽅法lastColumnNumber = -1;try {optRows(sheetIndex,curRow, rowlist);} catch (Exception e) {e.printStackTrace();}rowlist.clear();}}}2、创建导⼊接⼝package mon.excel;import java.util.List;public interface HxlsOptRowsInterface {public static final String SUCCESS="success";/*** 处理excel⽂件每⾏数据⽅法* @param sheetIndex* @param curRow* @param rowlist* @return success:成功,否则为失败原因* @throws Exception*/public String optRows(int sheetIndex, int curRow, List<String> rowlist) throws Exception; }3、创建实现类,在这个⽅法实现把导⼊的数据添加到数据库中package mon.excel;import java.util.List;public class HxlsInterfaceImpl implements HxlsOptRowsInterface {@Overridepublic String optRows(int sheetIndex, int curRow, List<String> datalist)throws Exception {//在这⾥执⾏数据的插⼊//System.out.println(rowlist);//saveData(datalist);return "";}}4、导⼊⼯具实现package mon.excel;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;/*** excel导⼊⼯具* Created by charlin on 2017/9/7.*/public class ExcelImportUtil extends HxlsAbstract{//数据处理beanprivate HxlsOptRowsInterface hxlsOptRowsInterface;//处理数据总数private int optRows_sum = 0;//处理数据成功数量private int optRows_success = 0;//处理数据失败数量private int optRows_failure = 0;//excel表格每列标题private List<String> rowtitle ;//失败数据private List<List<String>> failrows;//失败原因private List<String> failmsgs ;//要处理数据所在的sheet索引,从0开始private int sheetIndex;public ExcelImportUtil(String filename, int sheetIndex, HxlsOptRowsInterface hxlsOptRowsInterface) throws IOException, FileNotFoundException, SQLException {super(filename);this.sheetIndex = sheetIndex;this.hxlsOptRowsInterface = hxlsOptRowsInterface;this.rowtitle = new ArrayList<String>();this.failrows = new ArrayList<List<String>>();this.failmsgs = new ArrayList<String>();}@Overridepublic void optRows(int sheetIndex,int curRow, List<String> rowlist) throws Exception {/*for (int i = 0 ;i< rowlist.size();i++){System.out.print("'"+rowlist.get(i)+"',");}System.out.println();*///将rowlist的长度补齐和标题⼀致int k=rowtitle.size()-rowlist.size();for(int i=0;i<k;i++){rowlist.add(null);}if(sheetIndex == this.sheetIndex){optRows_sum++;if(curRow == 0){//记录标题rowtitle.addAll(rowlist);}else{String result = hxlsOptRowsInterface.optRows(sheetIndex, curRow, rowlist);if(!result.equals(hxlsOptRowsInterface.SUCCESS)){optRows_failure++;//失败数据failrows.add(new ArrayList<String>(rowlist));failmsgs.add(result);}else{optRows_success++;}}}}public long getOptRows_sum() {return optRows_sum;}public void setOptRows_sum(int optRows_sum) {this.optRows_sum = optRows_sum;}public long getOptRows_success() {return optRows_success;}public void setOptRows_success(int optRows_success) {this.optRows_success = optRows_success;}public long getOptRows_failure() {return optRows_failure;}public void setOptRows_failure(int optRows_failure) {this.optRows_failure = optRows_failure;}public List<String> getRowtitle() {return rowtitle;}public List<List<String>> getFailrows() {return failrows;}public List<String> getFailmsgs() {return failmsgs;}public void setFailmsgs(List<String> failmsgs) {this.failmsgs = failmsgs;}}5、导⼊实现⽅法:public static void main(String[] args){ExcelImportUtil importUtil;try {importUtil = new ExcelImportUtil("d:/data.xls",0, new HxlsInterfaceImpl());importUtil.process();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}更多关于java相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《》希望本⽂所述对⼤家java程序设计有所帮助。

java项目实现数据导入方法

java项目实现数据导入方法

java项目实现数据导入方法数据导入是在Java项目中常见的任务之一。

在实际开发中,我们经常需要将外部数据导入到我们的项目中,以便进行进一步的处理和分析。

本文将介绍一种常用的数据导入方法,帮助读者了解如何在Java项目中实现数据导入。

我们需要明确导入的数据来源。

数据可以来自各种不同的地方,例如本地文件、数据库、Web服务等。

在本文中,我们将以本地文件作为数据来源进行讲解。

1. 读取本地文件在Java中,我们可以使用java.io包中的File类来读取本地文件。

通过创建一个File对象,并指定文件的路径,我们就可以获取到文件的相关信息。

例如:```javaFile file = new File("C:/data.txt");```这段代码将创建一个File对象,表示位于C盘根目录下的data.txt文件。

2. 解析文件数据一旦我们获取到了文件对象,下一步就是解析文件中的数据。

数据的格式可能是各种各样的,例如文本文件、CSV文件、JSON文件等。

针对不同的格式,我们可以使用不同的方法来解析数据。

例如,如果文件是一个文本文件,我们可以使用Java的IO流来逐行读取文件内容,并进行相应的处理。

代码示例:```javatry (BufferedReader br = new BufferedReader(new FileReader(file))) {String line;while ((line = br.readLine()) != null) {// 对每一行数据进行处理// ...}} catch (IOException e) {e.printStackTrace();}```上述代码使用了Java 7中引入的try-with-resources语法,可以自动关闭资源,非常方便。

3. 数据处理与存储在解析文件数据时,我们可以根据具体需求对数据进行相应的处理。

例如,可以将数据存储到数据库中,或者将数据转换为Java对象进行进一步的操作。

java批量导入导出文件的实例分享(兼容xls,xlsx)

java批量导入导出文件的实例分享(兼容xls,xlsx)

java批量导⼊导出⽂件的实例分享(兼容xls,xlsx)⼀、介绍利⽤java实现⽂件的导⼊导出数据库,⽬前在⼤部分系统中是⽐较常见的功能了,今天写个⼩demo来理解其原理,没接触过的同学也可以看看参考下。

⽬前我所接触过的导⼊导出技术主要有POI和iReport,poi主要作为⼀些数据批量导⼊数据库,iReport做报表导出。

另外还有jxl类似poi的⽅式,不过貌似很久没跟新了,2007之后的office好像也不⽀持,这⾥就不说了。

⼆、POI使⽤详解2.1 什么是Apache POI?Apache POI是Apache软件基⾦会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

2.2 POI的jar包导⼊本次讲解使⽤maven⼯程,jar包版本使⽤poi-3.14和poi-ooxml-3.14。

⽬前最新的版本是3.16。

因为3.15以后相关api有更新,部分操作可能不⼀样,⼤家注意下。

<!-- poi的包 3.15版本后单元格类型获取⽅式有调整 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.14</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.14</version></dependency>2.3 POI的API讲解2.3.1 结构HSSF -提供读写Microsoft Excel格式档案的功能。

Java解析Excel文件并把数据存入数据库

Java解析Excel文件并把数据存入数据库

Java解析Excel⽂件并把数据存⼊数据库前段时间做⼀个⼩项⽬,为了同时存储多条数据,其中有⼀个功能是解析Excel并把其中的数据存⼊对应数据库中。

花了两天时间,不过⼀天多是因为⽤了"upload"关键字作为URL从⽽导致总报同⼀个错,最后在同学的帮助下顺利解决,下⾯我把⾃⼰⽤"POI"解析的⽅法总结出来供⼤家参考(我⽤的是SpingMVC和hibernate框架)。

1.web.xml中的配置⽂件web.xml中的配置⽂件就按照这种⽅式写,只需要把"application.xml"换成你的配置⽂件名即可<!--⽂件上传对应的配置⽂件--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:application.xml</param-value></context-param>2.application.xml的配置⽂件(固定写发)在这个配置⽂件中你还可以规定上传⽂件的格式以及⼤⼩等多种属性限制<!-- 定义⽂件上传解析器 --><bean id="multipartResolver"class="monsMultipartResolver"></bean>3.⽂件上传的前端HTML注意:1.enctype="multipart/form-data" 必须写,封装表单2.method="post",提交⽅式必须为"post"提交3.action="${text}/uploadfile", "uploadfile"切记不要写成"upload",否则你找到世界末⽇也不会找到哪⾥有问题(本⼈因为这个折腾了⼀天多时间)。

java读取txt文件封装成对象批量插入数据库的实例

java读取txt文件封装成对象批量插入数据库的实例

java读取txt⽂件封装成对象批量插⼊数据库的实例前序java后端开发,因为现在主流的模式是前后端分离开发的模式,所以后端开发⼈员的⼯作除了逻辑上的功能实现之外最终的操作都是对数据库的增删改查,在公司中往往需要向数据库中批量的插⼊数据,我们已经拥有了⽂本式的数据那么怎么将它插⼊到数据库中呢?⾃定义⼯具类:我们⾃⼰定义⼀个⼯具类,这个⼯具类的主要功能是读取⽂本⽂档txt⽂件中的数据(前提是每⼀⾏是⼀个对象,并且以空格将属性分开)读取出来封装成⼀个个对象,讲对象存储到集合当中,然后⼯具类将这个集合返回.⼯具类代码如下:public class BankUtil {public static List<BankValue> readTxtFile(String filePath, List<BankValue> list){try {// String encoding="GBK";File file=new File(filePath);if(file.isFile() && file.exists()){ //判断⽂件是否存在InputStreamReader read = new InputStreamReader(new FileInputStream(file));//考虑到编码格式BufferedReader bufferedReader = new BufferedReader(read);String lineTxt = null;while((lineTxt = bufferedReader.readLine()) != null){BankValue bankValue=new BankValue();// BankCode bankCode = new BankCode();String [] arr = lineTxt.split("\\s+");bankValue.setBankName(arr[0]);bankValue.setBankValue(arr[1]);// bankCode.setBankCode(arr[0]);// bankCode.setBankName(arr[1]);list.add(bankValue);// System.out.println(lineTxt);}read.close();}else{System.out.println("找不到指定的⽂件");}} catch (Exception e) {System.out.println("读取⽂件内容出错");e.printStackTrace();}return list;}}批量插⼊实体类对应的接⼝如下:public interface BankValueMapper {int insert(List<BankValue> list);}在对应的映射配置⽂件中的批量插⼊的代码如下:<insert id="insert" parameterType="list">insert into tb_bank_value (bank_name, bank_value)values<foreach collection="list" item="item" index="index" separator=",">(#{item.bankName},#{item.bankValue})</foreach></insert>测试代码如下:@Testpublic void testBankCode(){String filePath = "C:\\Users\\ZYH\\Desktop\\bankvalue.txt";// "res/";List<BankValue> list=new ArrayList<>();List<BankValue> BankValueList = BankUtil.readTxtFile(filePath, list); int i = bankValueMapper.insert(BankValueList);System.out.println(i);}。

简单的java解析文本文件批量导入数据库

简单的java解析文本文件批量导入数据库

package util;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/*** 批量导入数据库* @author Administrator**/public class InsertDB {public Connection getConnection() {Connection conn = null;try {Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@****:**:**", "**","**");} catch (Exception e) {e.printStackTrace();}return conn;}public static void main(String[] args) {InsertDB rt = new InsertDB();rt.AhPhoneInsert("C:\\Documents and Settings\\Administrator\\桌面\\C.txt");// 参数为你的txt文件路径}//数据记录导入public boolean AhPhoneInsert(String file){try {Connection con = getConnection();PreparedStatement ps = null,ps1=null,ps2=null;ResultSet rs = null;BufferedReader br = new BufferedReader((new InputStreamReader(new FileInputStream(new File(file)),"utf-8")));// 编码方式为utf-8,txt保存时编码方式也要选择为utf-8String line;try {String sql ="insert into C values(?)";try {con.setAutoCommit(false);ps = con.prepareStatement(sql);int n=0;while ((line = br.readLine()) != null) {String phone = line.trim();ps.setString(1, phone);ps.addBatch();n++;if(n>1000){ps.executeBatch();n=0;}}ps.executeBatch();mit();} catch (SQLException e) {e.printStackTrace();}finally{if(null!=rs){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(null!=ps){try {ps.close();} catch (SQLException e) {e.printStackTrace();}}if(null!=ps2){try {ps2.close();} catch (SQLException e) {e.printStackTrace();}}if(null!=ps1){try {ps1.close();} catch (SQLException e) {e.printStackTrace();}}if(null!=con){try {con.close();} catch (SQLException e) {e.printStackTrace();}}}} catch (IOException e) {e.printStackTrace();}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();}return true;}}。

Java多线程批量数据导入的方法详解

Java多线程批量数据导入的方法详解

Java多线程批量数据导⼊的⽅法详解前⾔:当遇到⼤量数据导⼊时,为了提⾼处理的速度,可以选择使⽤多线程来批量处理这些处理。

常见的场景有:⼤⽂件导⼊数据库(这个⽂件不⼀定是标准的CSV可导⼊⽂件或者需要在内存中经过⼀定的处理)数据同步(从第三⽅接⼝拉取数据处理后写⼊⾃⼰的数据库)以上的场景有⼀个共性,这类数据导⼊的场景简单来说就是将数据从⼀个数据源移动到另外⼀个数据源,⽽其中必定可以分为两步数据读取:从数据源读取数据到内存数据写⼊:将内存中的数据写⼊到另外⼀个数据源,可能存在数据处理⽽且根据读取的速度⼀般会⽐数据写⼊的速度快很多,即读取快,写⼊慢。

设计思路由于场景的特点是读取快,写⼊慢,如果是使⽤多线程处理,建议是数据写⼊部分改造为多线程。

⽽数据读取可以改造成批量读取数据。

简单来说就是两个要点:批量读取数据多线程写⼊数据⽰例多线程批量处理最简单的⽅案是使⽤线程池来进⾏处理,下⾯会通过⼀个模拟批量读取和写⼊的服务,以及对这个服务的多线程写⼊调⽤作为⽰例,展⽰如何多线程批量数据导⼊。

模拟服务import java.util.concurrent.atomic.AtomicLong;/*** 数据批量写⼊⽤的模拟服务** @author RJH* create at 2019-04-01*/public class MockService {/*** 可读取总数*/private long canReadTotal;/*** 写⼊总数*/private AtomicLong writeTotal=new AtomicLong(0);/*** 写⼊休眠时间(单位:毫秒)*/private final long sleepTime;/*** 构造⽅法** @param canReadTotal* @param sleepTime*/public MockService(long canReadTotal, long sleepTime) {this.canReadTotal = canReadTotal;this.sleepTime = sleepTime;}/*** 批量读取数据接⼝** @param num* @return*/public synchronized long readData(int num) {long readNum;if (canReadTotal >= num) {canReadTotal -= num;readNum = num;} else {readNum = canReadTotal;canReadTotal = 0;}//System.out.println("read data size:" + readNum);return readNum;}/*** 写⼊数据接⼝*/public void writeData() {try {// 休眠⼀定时间模拟写⼊速度慢Thread.sleep(sleepTime);} catch (InterruptedException e) {e.printStackTrace();}// 写⼊总数⾃增System.out.println("thread:" + Thread.currentThread() + " write data:" + writeTotal.incrementAndGet()); }/*** 获取写⼊的总数** @return*/public long getWriteTotal() {return writeTotal.get();}}批量数据处理器import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/*** 基于线程池的多线程批量写⼊处理器* @author RJH* create at 2019-04-01*/public class SimpleBatchHandler {private ExecutorService executorService;private MockService service;/*** 每次批量读取的数据量*/private int batch;/*** 线程个数*/private int threadNum;public SimpleBatchHandler(MockService service, int batch,int threadNum) {this.service = service;this.batch = batch;//使⽤固定数⽬的线程池this.executorService = Executors.newFixedThreadPool(threadNum);}/*** 开始处理*/public void startHandle() {// 开始处理的时间long startTime = System.currentTimeMillis();System.out.println("start handle time:" + startTime);long readData;while ((readData = service.readData(batch)) != 0) {// 批量读取数据,知道读取不到数据才停⽌for (long i = 0; i < readData; i++) {executorService.execute(() -> service.writeData());}}// 关闭线程池executorService.shutdown();while (!executorService.isTerminated()) {//等待线程池中的线程执⾏完}// 结束时间long endTime = System.currentTimeMillis();System.out.println("end handle time:" + endTime);// 总耗时System.out.println("total handle time:" + (endTime - startTime) + "ms");// 写⼊总数System.out.println("total write num:" + service.getWriteTotal());}}测试类/*** SimpleBatchHandler的测试类* @author RJH* create at 2019-04-01*/public class SimpleBatchHandlerTest {public static void main(String[] args) {// 总数long total=100000;// 休眠时间long sleepTime=100;// 每次拉取的数量int batch=100;// 线程个数int threadNum=16;MockService mockService=new MockService(total,sleepTime);SimpleBatchHandler handler=new SimpleBatchHandler(mockService,batch,threadNum);handler.startHandle();}}运⾏结果start handle time:1554298681755thread:Thread[pool-1-thread-2,5,main] write data:1thread:Thread[pool-1-thread-1,5,main] write data:2...省略部分输出thread:Thread[pool-1-thread-4,5,main] write data:100000end handle time:1554299330202total handle time:648447mstotal write num:100000分析在单线程情况下的执⾏时间应该为total*sleepTime,即10000000ms,⽽改造为多线程后执⾏时间为648447ms。

JAVA从文本文件(txt)读取一百万条数据保存到数据库

JAVA从文本文件(txt)读取一百万条数据保存到数据库

JAVA从⽂本⽂件(txt)读取⼀百万条数据保存到数据库Java读取⼤⽂本⽂件保存到数据库 将⽂件读取到内存,效率⽐较⾼,经过测试读取1G左右的⽂本⽂件,机器内存消耗达到接近3个G,对内存消耗太⼤,不建议使⽤ 通过开源的Apache Commons IO流类库提供的LineIterator对每⾏数据读取,底层通过jdk中提供的BufferedReader实现,对内存的开销不是很⼤创建java项⽬引⼊pom依赖1<!-- https:///artifact/commons-io/commons-io -->2<dependency>3<groupId>commons-io</groupId>4<artifactId>commons-io</artifactId>5<version>2.4</version>6</dependency>7<!-- https:///artifact/ojdbc/ojdbc -->8<dependency>9<groupId>ojdbc</groupId>10<artifactId>ojdbc</artifactId>11<version>14</version>12</dependency>具体实现代码1package com.sun.file;23import java.io.File;4import java.io.IOException;5import java.sql.Connection;6import java.sql.DriverManager;7import java.sql.PreparedStatement;8import java.sql.SQLException;9import java.util.Date;1011import mons.io.FileUtils;12import mons.io.LineIterator;1314public class ReadCustomerFile {1516int idx;17 Connection conn = null;18 PreparedStatement pstmt = null;1920/**21 * 使⽤commons-io.jar包的FileUtils的类进⾏读取22 * txt中内容⽂件的分割必须为|,java中需要加转译符号23 * @Title: readTxtFileByFileUtils24 * @author sunt25 * @date 2017年11⽉13⽇26 * @return void27*/28public void readTxtFileByFileUtils(String fileName) {29 File file = new File(fileName);3031 dbConnection();3233try {34 LineIterator lineIterator = FileUtils.lineIterator(file, "UTF-8");35while (lineIterator.hasNext()) {36 String line = lineIterator.nextLine();3738// ⾏数据转换成数组38// ⾏数据转换成数组39 String[] custArray = line.split("\\|");40 insertCustInfo(custArray,"SQLLOADER");41 Thread.sleep(10);42 }43 } catch (IOException e) {44 e.printStackTrace();45 } catch (InterruptedException e) {46 e.printStackTrace();47 } finally {48 dbDisConnection();49 }50 }5152/**53 * 数据⼊库的逻辑需要⾃⼰实现54 * sqlBf.append("INSERT INTO TEMP_CUST_INFO(CUST_NO, CUST_NM, MOB_NO1) \n");55 sqlBf.append(" VALUES(? \n");56 sqlBf.append(" , ? \n");57 sqlBf.append(" , ?) \n");5859拼接sql最后结尾的括号不能丢失60 * @Title: insertCustInfo61 * @author sunt62 * @date 2017年11⽉13⽇63 * @return void64*/65public void insertCustInfo(String[] strArray,String tableName) {66try {67 StringBuffer sqlBf = new StringBuffer();68 sqlBf.setLength(0);6970 sqlBf.append("INSERT INTO "+tableName+"(ID, NAME) \n");71 sqlBf.append(" VALUES(? \n");72 sqlBf.append(" , ?) \n");7374 pstmt = conn.prepareStatement(sqlBf.toString());75 idx = 1;76 pstmt.clearParameters();77// pstmt.setInt(idx++, Integer.parseInt(strArray[0]));78 pstmt.setString(idx++, strArray[0]);79 pstmt.setString(idx++, strArray[1]);8081 pstmt.executeUpdate();82 } catch (SQLException e) {83 e.printStackTrace();84 } finally {85if (pstmt != null) {86try {87 pstmt.close();88 } catch (SQLException e) {89 e.printStackTrace();90 }91 }92 }93 }9495/**96 * 连接数据库的基本信息97 * @Title: dbConnection98 * @author sunt99 * @date 2017年11⽉13⽇100 * @return Connection101*/102public Connection dbConnection() {103try {104 Class.forName("oracle.jdbc.driver.OracleDriver");105106 String url = "jdbc:oracle:thin:@192.168.40.30:1521:orcl";107 String user = "ACTIVITY1";108 String password = "ACTIVITY1";109109110 conn = DriverManager.getConnection(url, user, password);111 System.out.println("Connection 开启!");112 } catch (ClassNotFoundException e) {113 e.printStackTrace();114 } catch (SQLException e) {115 e.printStackTrace();116 }117118return conn;119 }120121/**122 * 关闭数据库的连接123 * @Title: dbDisConnection124 * @author sunt125 * @date 2017年11⽉13⽇126 * @return void127*/128public void dbDisConnection() {129if (conn != null) {130try {131 conn.close();132 System.out.println("Connection 关闭!");133 } catch (SQLException e) {134 e.printStackTrace();135 }136 }137 }138139//测试代码140public static void main(String[] args) {141 ReadCustomerFile rcf = new ReadCustomerFile();142 Long startTime = new Date().getTime();143 rcf.readTxtFileByFileUtils("F:\\lc_test.txt");144 System.out.println("导⼊数据总共耗时:" + (new Date().getTime() - startTime)/1000 + "秒"); 145 }146 }导⼊的⽂件模板(⼤约100百万模拟数据),以|作为分隔符导⼊数据库成功注意事项: 需要修改⾃⼰的数据库连接信息和指定导⼊⽂本⽂件的路径,insertCustInfo⽅法需要⾃⼰修改实现。

批量导入文本数据操作方法

批量导入文本数据操作方法

批量导入文本数据操作方法
批量导入文本数据可以通过以下几种方法进行操作:
1. 手动导入:可以通过文件管理器或命令行界面手动选择要导入的文本文件,然后逐个文件导入数据。

这种方法适用于少量文本文件的情况。

2. 使用数据导入工具:如果需要导入大量的文本文件,可以使用数据导入工具或脚本来自动化导入过程。

这些工具可以读取指定的目录中的所有文本文件,并将其逐个导入数据库或其他数据存储系统。

3. 使用编程语言进行导入:如果需要对导入的文本数据进行处理或转换,可以使用编程语言如Python、Java或R来完成导入操作。

通过编写代码,可以使用文件读取功能和数据库连接工具来读取文本文件并将数据导入到数据库中。

需要注意的是,批量导入文本数据操作的具体步骤和方法会根据使用的工具、数据库或编程语言而有所不同。

因此,根据具体的需求和环境,选择合适的方法来进行批量导入文本数据操作。

Java读取文本文件,按字节长度解析数据入库

Java读取文本文件,按字节长度解析数据入库

Java读取⽂本⽂件,按字节长度解析数据⼊库⼀般在解析⽂件读取数据时,⽂件每⼀⾏的字段与字段之间都会以指定符合隔开,⽐如:"|"、","等。

但是最近⼀个项⽬,⽂件中每⼀⾏是以由字段指定的字节长所组成的,中间并⽆任何符号,这倒是少见。

按照正常的思路,读取每⼀⾏时按照指定字节的长度,使⽤subString截取即可。

但是在⽣产上,⽂件都是放在linux服务器上的,⽂件的编码格式⼀般为:GBK,⽽且是经过GBK编码的字节⽂件,subString是截取字符串的,⾃然不能⽤了。

那具体该如何做呢,1:替换subString,重写新⽅法去进⾏字节截取2:在解析之前对⽂件先进⾏GBK编码代码贴出来:/*** 解析⿊名单表⽂件** @param filePath* ⿊名单表⽂件路径* @return blackList 要新增的⿊名单集合* @throws Exception*/public static List<LoanBlackList> parseCunegFile(String filePath)throws Exception {// 创建接受listList<LoanBlackList> blackList = new ArrayList<>();try {File file = new File(filePath);InputStream is = new FileInputStream(file);BufferedReader br = new BufferedReader(new InputStreamReader(is,Charset.forName("GBK")));String line = "";while ((line = br.readLine()) != null) {// 客户证件号码-19位-截取6-25String customerIdNumber = StringCommonUtil.substringByte(line,6, 19).trim();// ⿊名单类型-5位-截取167-172String blackListType = StringCommonUtil.substringByte(line,167, 5).trim();LoanBlackList lbl = new LoanBlackList();// 重新set更新数据lbl.setCustomerIdNumber(customerIdNumber);lbl.setBlackListType(blackListType);blackList.add(lbl);}} catch (IOException e) {e.printStackTrace();}return blackList;}其中,这⼀句进⾏对⽂件输⼊流的字节编码BufferedReader br = new BufferedReader(new InputStreamReader(is,Charset.forName("GBK")));字节截取的⽅法如下:/*** 按字节截取字符串,指定截取起始字节位置与截取字节长度** @param orignal* 要截取的字符串* @param offset* 截取Byte长度;* @return截取后的字符串* @throws UnsupportedEncodingException* 使⽤了JAVA不⽀持的编码格式*/public static String substringByte(String orignal, int start, int count) {// 如果⽬标字符串为空,则直接返回,不进⼊截取逻辑;if (orignal == null || "".equals(orignal))return orignal;// 截取Byte长度必须>0if (count <= 0)return orignal;// 截取的起始字节数必须⽐if (start < 0)start = 0;// ⽬标char Pull buff缓存区间;StringBuffer buff = new StringBuffer();try {// 截取字节起始字节位置⼤于⽬标String的Byte的length则返回空值if (start >= getStringByteLenths(orignal))return null;int len = 0;char c;// 遍历String的每⼀个Char字符,计算当前总长度// 如果到当前Char的的字节长度⼤于要截取的字符总长度,则跳出循环返回截取的字符串。

Java利用MYSQLLOADDATALOCALINFILE实现大批量导入数据到MySQL

Java利用MYSQLLOADDATALOCALINFILE实现大批量导入数据到MySQL

Java利⽤MYSQLLOADDATALOCALINFILE实现⼤批量导⼊数据到MySQLMysql load data的使⽤数据库中,最常见的写⼊数据⽅式是通过SQL INSERT来写⼊,另外就是通过备份⽂件恢复数据库,这种备份⽂件在MySQL 中是SQL脚本,实际上执⾏的还是在批量INSERT语句。

在实际中,常常会遇到两类问题:⼀类是数据导⼊,⽐如从word、excel表格或者txt⽂档导⼊数据(这些数据⼀般来⾃于⾮技术⼈员通过OFFICE⼯具录⼊的⽂档);⼀类数据交换,⽐如从MySQL、Oracle、DB2数据库之间的数据交换。

这其中就⾯临⼀个问题:数据库SQL脚本有差异,SQL交换⽐较⿇烦。

但是⼏乎所有的数据库都⽀持⽂本数据导⼊(LOAD)导出(EXPORT)功能。

利⽤这⼀点,就可以解决上⾯所提到的数据交换和导⼊问题。

MySQL的LOAD DATAINFILE语句⽤于⾼速地从⼀个⽂本⽂件中读取⾏,并装⼊⼀个表中。

⽂件名称必须为⼀个⽂字字符串。

下⾯以MySQL5为例说明,说明如何使⽤MySQL的LOADDATA命令实现⽂本数据的导⼊。

注意:这⾥所说的⽂本是有⼀定格式的⽂本,⽐如说,⽂本分⾏,每⾏中⽤相同的符号隔开⽂本等等。

等等,获取这样的⽂本⽅法也⾮常的多,⽐如可以把word、excel表格保存成⽂本,或者是⼀个csv⽂件。

在项⽬中,使⽤的环境是快速上传⼀个csv⽂件,原系统中是使⽤的db2数据库,然后调⽤了与mysql的loaddata相似的⼀个函数sysproc.db2load。

但是loaddata在mysql的存储过程是不能使⽤的。

采取的⽅法时在java代码中调⽤此⽅法。

实现的例⼦:准备测试表SQL如下:USE test;CREATE TABLE `test` (`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,`a` int(11) NOT NULL,`b` bigint(20) UNSIGNED NOT NULL,`c` bigint(20) UNSIGNED NOT NULL,`d` int(10) UNSIGNED NOT NULL,`e` int(10) UNSIGNED NOT NULL,`f` int(10) UNSIGNED NOT NULL,PRIMARY KEY (`id`),KEY `a_b` (`a`, `b`)) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARSET = utf8Java代码如下:package com.seven.dbTools.DBTools;import org.apache.log4j.Logger;import org.springframework.jdbc.core.JdbcTemplate;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import javax.sql.DataSource;/***@author seven*@since 07.03.2013*/public class BulkLoadData2MySQL {private static final Logger logger = Logger.getLogger(BulkLoadData2MySQL.class);private JdbcTemplate jdbcTemplate;private Connection conn = null;public void setDataSource(DataSource dataSource) {this.jdbcTemplate = new JdbcTemplate(dataSource);}public static InputStream getTestDataInputStream() {StringBuilder builder = new StringBuilder();for (int i = 1; i <= 10; i++) {for (int j = 0; j <= 10000; j++) {builder.append(4);builder.append("\t");builder.append(4 + 1);builder.append("\t");builder.append(4 + 2);builder.append("\t");builder.append(4 + 3);builder.append("\t");builder.append(4 + 4);builder.append("\t");builder.append(4 + 5);builder.append("\n");}}byte[] bytes = builder.toString().getBytes();InputStream is = new ByteArrayInputStream(bytes);return is;}/**** load bulk data from InputStream to MySQL*/public int bulkLoadFromInputStream(String loadDataSql,InputStream dataStream) throws SQLException {if (dataStream == null) {("InputStream is null ,No data is imported");return 0;}conn = jdbcTemplate.getDataSource().getConnection();PreparedStatement statement = conn.prepareStatement(loadDataSql);int result = 0;if (statement.isWrapperFor(com.mysql.jdbc.Statement.class)) {com.mysql.jdbc.PreparedStatement mysqlStatement = statement.unwrap(com.mysql.jdbc.PreparedStatement.class); mysqlStatement.setLocalInfileInputStream(dataStream);result = mysqlStatement.executeUpdate();}return result;}public static void main(String[] args) {String testSql = "LOAD DATA LOCAL INFILE 'sql.csv' IGNORE INTO TABLE test.test (a,b,c,d,e,f)";InputStream dataStream = getTestDataInputStream();BulkLoadData2MySQL dao = new BulkLoadData2MySQL();try {long beginTime = System.currentTimeMillis();int rows = dao.bulkLoadFromInputStream(testSql, dataStream);long endTime = System.currentTimeMillis();("importing " + rows +" rows data into mysql and cost " + (endTime - beginTime) +" ms!");} catch (SQLException e) {e.printStackTrace();}System.exit(1);}}提⽰:例⼦中的代码使⽤setLocalInfileInputStream⽅法,会直接忽略掉⽂件名称,⽽直接将IO流导⼊到数据库中。

java读取本地txt文件并插入数据库

java读取本地txt文件并插入数据库

java读取本地txt⽂件并插⼊数据库1. package iia.ny.web.control.configManage;2.3.4. import java.io.BufferedReader;5. import java.io.File;6. import java.io.FileReader;7. import java.io.IOException;8. import java.sql.Connection;9. import java.sql.DriverManager;10. import java.sql.PreparedStatement;11. import java.sql.ResultSet;12. import java.sql.SQLException;13. import java.util.ArrayList;14. import java.util.List;15. import java.util.Scanner;16.17.18. public class InsertIntoDB {19. //读取⽂本操作20. public static String[] writeToDat(String path) {21. File file = new File(path);22. List<String> list = new ArrayList<String>();23. String []strings = null;24. try {25. BufferedReader bw = new BufferedReader(new FileReader(file));26. String line = null;27. //因为不知道有⼏⾏数据,所以先存⼊list集合中28. while((line = bw.readLine()) != null){29. list.add(line);30. }31. bw.close();32. } catch (IOException e) {33. e.printStackTrace();34. }35. //确定数组长度36. strings = new String[list.size()];37. for(int i=0;i<list.size();i++){38. String s = (String) list.get(i);39. strings[i] = s;40. }41. return strings;42. }43. //连接数据库44. public static Connection getConnection(String data,String user,String pwd){45.46. Connection conn = null;47. try {48. Class.forName("com.mysql.jdbc.Driver");49. conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/"+ data +"?characterEncoding=UTF-8",user , pwd);50. } catch (Exception e) {51. e.printStackTrace();52. }53. return conn;54. }55. //插⼊数据库,只能为⼀个字段56. public static boolean insertInto(String data,String table,String field,String user,String pwd,String []str){57. try {58. Connection conn = getConnection(data,user,pwd);59. conn.setAutoCommit(false);60. String sql = "INSERT INTO"+ table + "("+ field +") VALUES (?);";61. PreparedStatement pstmt = conn.prepareStatement(sql);62. for (int i = 0; i < str.length; i++) {63. pstmt.setString(1, str[i]);64. pstmt.executeUpdate();65. // mit();67. mit();68. return true;69. } catch (SQLException e) {70. // TODO Auto-generated catch block71. e.printStackTrace();72. return false;73. }74.75. }76. public static String[] query(String data,String table,String field,String user,String pwd){77. try {78. String []str = null;79. int i = 0;80. Connection conn = getConnection(data,user,pwd);81. String sql = "select "+ field +" from" + table +";" ;82. PreparedStatement pstmt = conn.prepareStatement(sql);83. ResultSet rs = pstmt.executeQuery();84. while (rs.next()) {85. str[i] = rs.getString(field);86. i++;87. }88. return str;89. } catch (SQLException e) {90. // TODO Auto-generated catch block91. e.printStackTrace();92. return null;93. }94.95. }96. public static void main(String[] args){97. String []str2 = null;98. String []str = null;99. String []str3 = null;100. boolean flage1 = true;101. boolean flage2 = true;102. boolean flage3 = true;103. System.out.println("请输⼊⽬标⽂件绝对路径:");104. Scanner sc = new Scanner(System.in);105. String path = sc.next();106. while(flage3){107. if (path!=null&&!path.equals("")) {108. flage3 = false;109. str = writeToDat(path);110. }else {111. System.out.println("输⼊不能为空");112. }113. }114. System.out.println("请输⼊所需连接的数据库名,表名,字段名(只能为⼀个),⽤户名,密码,⽤“#”隔开:"); 115. String strA = sc.next();116. while(flage1){117. if (strA!=null&&!strA.equals("")) {118. flage1 = false;119. while(flage2){120. if (strA.indexOf("#")>=0) {121. flage2 = false;122. str2 = strA.split("#");123. }else {124. System.out.println("您输⼊的格式有错,请重新输⼊");125. }126. }127. }else {128. System.out.println("输⼊不能为空");129. }130. }131. boolean b = insertInto(str2[0], str2[1], str2[2], str2[3], str2[4],str);132. if(b){133. System.out.println("插⼊成功!");135. System.out.println("插⼊失败!");136. }137. str3 = query(str2[0], str2[1], str2[2], str2[3], str2[4]); 138. for (int i = 0; i < str3.length; i++) {139. System.out.println(str3[i]);140. }141. }142.143. }144.复制代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 批量导入数据库
* @author Administrator
*
*/
public class InsertDB {
public Connection getConnection() {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@****:**:**", "**",
"**");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args) {
InsertDB rt = new InsertDB();
rt.AhPhoneInsert("C:\\Documents and Settings\\Administrator\\桌面\\C.txt");// 参数为你的txt文件路径
}
//数据记录导入
public boolean AhPhoneInsert(String file){
try {
Connection con = getConnection();
PreparedStatement ps = null,ps1=null,ps2=null;
ResultSet rs = null;
BufferedReader br = new BufferedReader(
(new InputStreamReader(new FileInputStream(new File(file)),
"utf-8")));// 编码方式为utf-8,txt保存时编码方式也要选择为utf-8
String line;
try {
String sql ="insert into C values(?)";
try {
con.setAutoCommit(false);
ps = con.prepareStatement(sql);
int n=0;
while ((line = br.readLine()) != null) {
String phone = line.trim();
ps.setString(1, phone);
ps.addBatch();
n++;
if(n>1000){
ps.executeBatch();
n=0;
}
}
ps.executeBatch();
mit();
} catch (SQLException e) {
e.printStackTrace();
}finally{
if(null!=rs){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null!=ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null!=ps2){
try {
ps2.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null!=ps1){
try {
ps1.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null!=con){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return true;
}
}。

相关文档
最新文档