1.nio实现读取大文件,之后分批读取写入数据库

2.nio实现读取大文件,之后分批写入指定文件

  1. package com.ally;
  2. import java.io.File;
  3. import java.io.RandomAccessFile;
  4. import java.nio.ByteBuffer;
  5. import java.nio.channels.FileChannel;
  6. import java.sql.*;
  7. /**
  8. * Created by admin on 2016/6/28.
  9. * 1.nio分批读取sql文件并执行插入数据库
  10. * 2.读取一个文件写入另外文件
  11. */
  12. public class TestNio {
  13. public static void main(String args[]) throws Exception {
  14. System.err.println("begin");
  15. long start = System.currentTimeMillis();
  16. int _5M = 1024 * 1024 * 5;
  17. File fin = new File("D:\\drug_general_info.sql");
  18. FileChannel fcin = new RandomAccessFile(fin, "r").getChannel();
  19. ByteBuffer rBuffer = ByteBuffer.allocate(_5M);
  20. //将文件读取执行到数据库
  21. readFileByLine(_5M, fcin, rBuffer);
  22. //将文件读取并写入另外文件
  23. File fout = new File("D:\\mm.sql");
  24. FileChannel fcout = new RandomAccessFile(fout, "rws").getChannel();
  25. ByteBuffer wBuffer = ByteBuffer.allocateDirect(_5M);
  26. saveOtherFile( _5M,  fcin, rBuffer,  fcout,  wBuffer);
  27. System.err.print((System.currentTimeMillis() - start) / 1000);
  28. }
  29. /**
  30. * 将一个文件内容写入另外一个
  31. * @param bufSize
  32. * @param fcin
  33. * @param rBuffer
  34. * @param fcout
  35. * @param wBuffer
  36. */
  37. public static void saveOtherFile(int bufSize, FileChannel fcin,
  38. ByteBuffer rBuffer, FileChannel fcout, ByteBuffer wBuffer){
  39. Statement pst = null;
  40. String enterStr = "\n";
  41. try {
  42. byte[] bs = new byte[bufSize];
  43. StringBuilder strBuf = new StringBuilder("");
  44. String tempString = null;
  45. while (fcin.read(rBuffer) != -1) {
  46. int rSize = rBuffer.position();
  47. rBuffer.rewind();
  48. rBuffer.get(bs);
  49. rBuffer.clear();
  50. tempString = new String(bs, 0, rSize);
  51. int fromIndex = 0;
  52. int endIndex = 0;
  53. int i = 0;
  54. while ((endIndex = tempString.indexOf(enterStr, fromIndex)) != -1) {
  55. String line = tempString.substring(fromIndex, endIndex);
  56. line = strBuf.toString() + line;
  57. writeFileByLine(fcout, wBuffer, line);
  58. strBuf.delete(0, strBuf.length());
  59. fromIndex = endIndex + 1;
  60. }
  61. }
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. /**
  67. * 读文件写入数据库
  68. * @param bufSize
  69. * @param fcin
  70. * @param rBuffer
  71. */
  72. public static void readFileByLine(int bufSize, FileChannel fcin,
  73. ByteBuffer rBuffer) {
  74. Connection conn = null;
  75. Statement pst = null;
  76. String enterStr = "\n";
  77. try {
  78. byte[] bs = new byte[bufSize];
  79. StringBuilder strBuf = new StringBuilder("");
  80. String tempString = null;
  81. Class.forName("com.mysql.jdbc.Driver");
  82. conn = DriverManager.getConnection(
  83. "jdbc:mysql://localhost:3306/doctor?useUnicode=true&characterEncoding=utf-8", "root", "root");
  84. pst = conn.createStatement();
  85. while (fcin.read(rBuffer) != -1) {
  86. int rSize = rBuffer.position();
  87. rBuffer.rewind();
  88. rBuffer.get(bs);
  89. rBuffer.clear();
  90. tempString = new String(bs, 0, rSize);
  91. int fromIndex = 0;
  92. int endIndex = 0;
  93. int i = 0;
  94. while ((endIndex = tempString.indexOf(enterStr, fromIndex)) != -1) {
  95. String line = tempString.substring(fromIndex, endIndex);
  96. line = strBuf.toString() + line;
  97. strBuf.delete(0, strBuf.length());
  98. fromIndex = endIndex + 1;
  99. pst.addBatch(line);
  100. /*  System.out.println("-----------------------");
  101. System.out.println(line);
  102. System.out.println("-----------------------");*/
  103. if (i % 100 == 0) {
  104. System.out.println("执行了:" + i);
  105. if (i == 2700) {
  106. System.out.println("导了:" + i);
  107. }
  108. int[] flag = pst.executeBatch();
  109. System.out.println("结果:" + flag[0]);
  110. }
  111. i += 1;
  112. }
  113. // 执行批量更新
  114. pst.executeBatch();
  115. if (rSize > tempString.length()) {
  116. strBuf.append(tempString.substring(fromIndex,
  117. tempString.length()));
  118. } else {
  119. strBuf.append(tempString.substring(fromIndex, rSize));
  120. }
  121. //  System.out.println(strBuf.toString());
  122. }
  123. } catch (Exception e) {
  124. e.printStackTrace();
  125. } finally {
  126. try {
  127. if (pst != null) {
  128. pst.close();
  129. }
  130. if (conn != null) {
  131. conn.close();
  132. }
  133. } catch (SQLException e) {
  134. e.printStackTrace();
  135. }
  136. }
  137. }
  138. public static void writeFileByLine(FileChannel fcout, ByteBuffer wBuffer,
  139. String line) {
  140. try {
  141. fcout.write(wBuffer.wrap(line.getBytes()), fcout.size());
  142. } catch (Exception e) {
  143. e.printStackTrace();
  144. }
  145. }
  146. }
package com.ally;

import java.io.File;

import java.io.RandomAccessFile;

import java.nio.ByteBuffer;

import java.nio.channels.FileChannel;

import java.sql.*; /**
  • Created by admin on 2016/6/28.
  • 1.nio分批读取sql文件并执行插入数据库
  • 2.读取一个文件写入另外文件

    */

    public class TestNio {

    public static void main(String args[]) throws Exception {

    System.err.println("begin");

    long start = System.currentTimeMillis();

    int _5M = 1024 * 1024 * 5;

    File fin = new File("D:\drug_general_info.sql");

    FileChannel fcin = new RandomAccessFile(fin, "r").getChannel();

    ByteBuffer rBuffer = ByteBuffer.allocate(_5M);

    //将文件读取执行到数据库

    readFileByLine(_5M, fcin, rBuffer);
     //将文件读取并写入另外文件
    File fout = new File("D:\\mm.sql");
    FileChannel fcout = new RandomAccessFile(fout, "rws").getChannel();
    ByteBuffer wBuffer = ByteBuffer.allocateDirect(_5M);
    saveOtherFile( _5M, fcin, rBuffer, fcout, wBuffer);
    System.err.print((System.currentTimeMillis() - start) / 1000);

    }

    /**

    • 将一个文件内容写入另外一个

    • @param bufSize

    • @param fcin

    • @param rBuffer

    • @param fcout

    • @param wBuffer

      */

      public static void saveOtherFile(int bufSize, FileChannel fcin,

      ByteBuffer rBuffer, FileChannel fcout, ByteBuffer wBuffer){

      Statement pst = null;

      String enterStr = "\n";

      try {

      byte[] bs = new byte[bufSize];

      StringBuilder strBuf = new StringBuilder("");

      String tempString = null;

      while (fcin.read(rBuffer) != -1) {

      int rSize = rBuffer.position();

      rBuffer.rewind();

      rBuffer.get(bs);

      rBuffer.clear();

      tempString = new String(bs, 0, rSize);

      int fromIndex = 0;

      int endIndex = 0;

      int i = 0;

      while ((endIndex = tempString.indexOf(enterStr, fromIndex)) != -1) {

      String line = tempString.substring(fromIndex, endIndex);

      line = strBuf.toString() + line;

      writeFileByLine(fcout, wBuffer, line);

      strBuf.delete(0, strBuf.length());

      fromIndex = endIndex + 1;

               }
      }
      } catch (Exception e) {
      e.printStackTrace();
      }

    }

    /**

    • 读文件写入数据库

    • @param bufSize

    • @param fcin

    • @param rBuffer

      */

      public static void readFileByLine(int bufSize, FileChannel fcin,

      ByteBuffer rBuffer) {

      Connection conn = null;

      Statement pst = null;

      String enterStr = "\n";

      try {

      byte[] bs = new byte[bufSize];

      StringBuilder strBuf = new StringBuilder("");

      String tempString = null;

      Class.forName("com.mysql.jdbc.Driver");

      conn = DriverManager.getConnection(

      "jdbc:mysql://localhost:3306/doctor?useUnicode=true&characterEncoding=utf-8", "root", "root");

      pst = conn.createStatement();

      while (fcin.read(rBuffer) != -1) {

           int rSize = rBuffer.position();
      rBuffer.rewind();
      rBuffer.get(bs);
      rBuffer.clear();
      tempString = new String(bs, 0, rSize);
      int fromIndex = 0;
      int endIndex = 0;
      int i = 0;
      while ((endIndex = tempString.indexOf(enterStr, fromIndex)) != -1) {
      String line = tempString.substring(fromIndex, endIndex);
      line = strBuf.toString() + line;
      strBuf.delete(0, strBuf.length());
      fromIndex = endIndex + 1;
      pst.addBatch(line);
      /* System.out.println("-----------------------");
      System.out.println(line);
      System.out.println("-----------------------");*/
      if (i % 100 == 0) {
      System.out.println("执行了:" + i);
      if (i == 2700) {
      System.out.println("导了:" + i);
      }
      int[] flag = pst.executeBatch();
      System.out.println("结果:" + flag[0]);
      }
      i += 1;
      }
      // 执行批量更新
      pst.executeBatch(); if (rSize > tempString.length()) {
      strBuf.append(tempString.substring(fromIndex,
      tempString.length()));
      } else {
      strBuf.append(tempString.substring(fromIndex, rSize));
      }
      // System.out.println(strBuf.toString());
      }

      } catch (Exception e) {

      e.printStackTrace();

      } finally {

      try {

      if (pst != null) {

      pst.close();

      }

      if (conn != null) {

      conn.close();

      }

      } catch (SQLException e) {

      e.printStackTrace();

      }

      }

      }

    public static void writeFileByLine(FileChannel fcout, ByteBuffer wBuffer,

    String line) {

    try {

    fcout.write(wBuffer.wrap(line.getBytes()), fcout.size());

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

nio实现文件读取写入数据库或文件的更多相关文章

  1. PostgreSql那点事(文件读取写入、命令执行的办法)

    • 2013/07/9 作者: admin PostgreSql那点事(文件读取写入.命令执行的办法) 今天无意发现了个PostgreSQL环境,线上学习了下,一般的数据注射(读写数据库)差异不大,不 ...

  2. xml文件读取到数据库

    xml文件读取到数据库   第一步,导包 c3p0,dom4j,jaxen,MySQL-connector 第二步  xml文件,config文件 第三步 javabean 第四步 c3p0的工具类 ...

  3. Excel 读取写入数据库

    // Excel 读取写入数据库 // 3.8版本的poi  4.0 可以不用写  parseCell  这个方法,可以直接赋值 STRING 类型 import org.apache.poi.hss ...

  4. SpringBoot读取Linux服务器某路径下文件\读取项目Resource下文件

    // SpringBoot读取Linux服务器某路径下文件 public String messageToRouted() { File file = null; try { file = Resou ...

  5. (OAF)jdeveloper集成log4j并将日志输出到指定文件并写入数据库

    参考: How to configure Log4j in JDev 11g Ever wanted to use log4j in your adf project ? Well though Or ...

  6. python向config、ini文件读取写入

    config读取操作 cf = configparser.ConfigParser() # 实例化对象 cf.read(filename) # 读取文件 cf.sections() # 读取secti ...

  7. html外部文件读取/写入

    1.文件的读取 外部文件读取控件: <input type="file" id="file_jquery" onchange="file_jqu ...

  8. python学习笔记6-输入输出与文件读取写入

    (1)打印到屏幕:print (2)读取键盘输入:input/raw_input #键盘输入 str = raw_input("Please enter:"); print (&q ...

  9. shell cat 合并文件,合并数据库sql文件

    > 覆盖写入 >> append模式写入 ###################################################################合并数 ...

随机推荐

  1. Android微信智能心跳方案 Android微信智能心跳方案

    原文地址: http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207243549&idx=1&sn=4ebe4beb81 ...

  2. spark 类标签的稀疏 特征向量

    一个向量(1.0,0.0,3.0)它有2中表示的方法 密集:[1.0,0.0,3.0]    其和一般的数组无异 稀疏:(3,[0,2],[1.0,3.0])     其表示的含义(向量大小,序号,值 ...

  3. nyoj--1011--So Easy[II](数学几何水题)

    So Easy[II] 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 这是一道基础的计算几何问题(其实这不提示大家也都看的出).问题描述如下: 给你一个N边形.且N边形 ...

  4. The while statement

    Computers are often used to automate repetitive tasks. Repeating identical or similar tasks without ...

  5. iview 分页的案例

    //html部分 //js部分

  6. 记intel杯比赛中各种bug与debug【其一】:安装intel caffe

    因为intel杯创新软件比赛过程中,并没有任何记录.现在用一点时间把全过程重演一次用作记录. 学习 pytorch 一段时间后,intel比赛突然不让用 pytoch 了,于是打算转战intel ca ...

  7. CF949C Data Center Maintenance(建图+强联通分量)

    题意 有 n 个信息中心,第 i 个信息中心要在第 ti 个小时维护,维护期间信息不能被获得. 每个用户的数据都有两份备份,第 i 个用户的数据放在信息中心 c(i,1) 和 c(i,2). 现在要挑 ...

  8. Linux下的压缩与解压缩

    1 .gz 1)压缩 root@xiaohuang-virtual-machine:/home/xiaohuang/桌面/hellow/hellow# gzip 2.txt 3.txt root@xi ...

  9. 【深度学习大讲堂】首期第一讲:人工智能的ABCDE 第二部分:简谈当前AI技术与发展趋势

    (完)

  10. 紫书 习题 10-14 UVa 10886(暴力+数据范围)

    开始的时候一看这题感觉很难,觉得肯定有什么很快的办法 不能暴力做(受了上一题10-13的影响) 然后一看那个函数感觉无从下手. 然后看了博客发现,原来这道题就是直接暴力-- 因为n的范围为10的7次方 ...