package com.tideway.readtxt; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class ReadTXT { public static List<String> trim(String[] source){ List<String> list = new ArrayList<String>();
//循环遍历得到的行文件,加入到list中 for(String item : source){ if(null==item||"".equals(item)) continue; list.add(item); } return list; } public static void main(String[] args) { int read = 0; int write = 0; FileInputStream fis = null; InputStreamReader isr = null; BufferedReader br = null; // 用于包装InputStreamReader,提高处理性能。因为BufferedReader有缓冲的,而InputStreamReader没有。 try { String str = ""; fis = new FileInputStream("e:\AGL_001.TXT");// FileInputStream // 从文件系统中的某个文件中获取字节 isr = new InputStreamReader(fis);// InputStreamReader 是字节流通向字符流的桥梁, br = new BufferedReader(isr);// 从字符输入流中读取文件中的内容,封装了一个new // InputStreamReader的对象 while ((str = br.readLine()) != null) { //截取得到的一行数据 String[] parms = str.split(" "); //跳过第一行 if(parms[0].equals("No")) continue; //把得到的数据放进list List<String> list = trim(parms); read++;
//调用添加方法,把list的第1,3,4,7条数据加入到mysql write+=JDBCAdd.Insert(list.get(0),list.get(2),list.get(3),list.get(6)); }
//记录下读了/写了多少条数据 System.out.println("read="+read+"; write="+write); } catch (FileNotFoundException e) { System.out.println("找不到指定文件"); } catch (IOException e) { System.out.println("读取文件失败"); } finally { try { br.close(); isr.close(); fis.close(); // 关闭的时候最好按照先后顺序关闭最后开的先关闭所以先关s,再关n,最后关m } catch (IOException e) { e.printStackTrace(); } } } }
读取txt文件,添加到list中,读取一条向数据库中添加一条。
添加操作:
package com.tideway.readtxt; import java.sql.Connection; import java.sql.PreparedStatement; public class JDBCAdd { public static int Insert(String... parms){ Connection conn=null; PreparedStatement preStatement=null;//创建PreparedStatement对象 try { //1、准备Connection连接数据库 conn=JDBCTools.getConnection(); //2、准备sql语句 //sql语句不再采用拼接方式,应用占位符问号的方式写sql语句。 String sql="insert into t_attendance(id,EnID,Name,DateTime) values(?,?,?,?)"; //3、准备prepareStatement //对占位符设置值,占位符顺序从1开始,第一个参数是占位符的位置,第二个参数是占位符的值。 preStatement=conn.prepareStatement(sql); //4、占位符设置值 for(int i=0;i<parms.length;i++){ preStatement.setObject(i+1, parms[i]); } //5、执行sql return preStatement.executeUpdate(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return 0; }finally{ //6、关闭数据库等 JDBCTools.closeConnection(null, preStatement, conn); } } }
数据库连接的方法:
package com.tideway.readtxt; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class JDBCTools { /** * 功能:JDBC连接数据库 * @return * @throws Exception */ public static Connection getConnection() throws Exception{ //创建Properties对象 Properties pro=new Properties(); //获取输入流 InputStream in= JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties"); //加载输入流 pro.load(in); String driver=pro.getProperty("driver"); String jdbcUrl=pro.getProperty("jdbcUrl"); String user=pro.getProperty("user"); String password=pro.getProperty("password"); //加载数据库驱动程序 Class.forName(driver); //通过DriverManager的getConnection()方法获取数据库连接 Connection conn=DriverManager.getConnection(jdbcUrl, user, password); return conn; } /** * 功能:关闭数据库连接 * @param rs * @param statement * @param conn */ public static void closeConnection(ResultSet rs,Statement statement,Connection conn){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(statement!=null){ try { statement.close(); } catch (Exception e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (Exception e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } } }