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. HTML5 内联 SVG

    SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺寸的情况下其图形 ...

  2. nyoj--49--开心的小明(背包)

    开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他 ...

  3. 14.mocha+should.js

    转自http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 众所周知对于任何一个项目来说,做好单元测试都是必不 ...

  4. TurtleWorld Exercises

    1. Write a function called square that takes a parameter named t, which is a turtle. It should use t ...

  5. SharePoint 学习快速导航

    根据我的学习过程,会不断的增加一些学习的快速链接 . 入门篇 SharePoint入门链接,针对刚刚开始了解SharePoint 的朋友,我也是处在入门的状态,随后会慢慢的累积增加 安装 | 部署 | ...

  6. PDO 拿出來的 Float 數據跟数据库中的数据不匹配

    数据库中的价格字段是 float 类型的,在 Laravel 中取出会出现这样的情况 数据库:71.9 -> 程序打印:72.0 数据库:75.2 -> 程序打印:75.3 在另外一个测试 ...

  7. js中字符串转驼峰转为下划线

    function dasherize(str) { return str.replace(/::/g, '/') .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') ...

  8. Css border样式

    1 四个边框 border-left 设置左边框,一般单独设置左边框样式使用border-right 设置右边框,一般单独设置右边框样式使用border-top 设置上边框,一般单独设置上边框样式使用 ...

  9. jdk--rpm.bin文件安装, zip解压与创建

    3,执行命令赋予安装文件777权限: # cd /usr/java(mkdir java –此目录需要创建) ①jdk-1_5_0_16-linux-i586-rpm.bin文件安装 # chmod ...

  10. @synchronized 再考察

    核心是:将标示对象与锁建立关联. 线程 锁 标识: 异常: NSString *test = @"test"; @try {     // Allocates a lock for ...