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. hdu 5318 The Goddess Of The Moon 矩阵高速幂

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5318 The Goddess Of The Moon Time Limit: 6000/3000 MS ( ...

  2. 使用quick自己定义Button

    使用quick时自己封装的类存放于特定的文件夹.便于以后使用 以下是作者经经常使用到的一个按钮 local MyButton = class("MyButton") functio ...

  3. pre自动换行

    从word复制到html中的文本,用pre能够原汁原味的展示出来,但是会出现超过屏蔽界限的情况. 需要进行换行处理. 加上一句css pre { white-space: pre-wrap; word ...

  4. matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)

    Customizing plots with style sheets - Matplotlib 1.5.1 documentation 1. 使用和显示其他画布风格 >> import ...

  5. jquery easyui ajax data属性传值方式

    $.ajax({   url:url,   type:'post',   data:data,   dataType:'json',   contentType: "application/ ...

  6. UVa 208 Firetruck【回溯】

    题意:给出一个n个节点的无向图,以及某个节点k,按照字典序从小到大输出从节点1到节点k的所有路径 看的题解 http://blog.csdn.net/hcbbt/article/details/975 ...

  7. python 中的property

    """ property() 的第一个参数是 getter 方法,第二个参数是 setter 方法 xx = property(a,b) @property #用于指示g ...

  8. linux中的swap

    1. 也许你会经常遇到一个经典的swap大小设置问题(比如狗血的面试题). 很多人多会说内存的2倍.. 但是个人认为一般而言 swap 不要设置太大,最好不要超过4G. 2. 进程申请内存不足时,发现 ...

  9. echarts如何修改数据视图dataView中的样式

    原文链接:点我 做了一个现实折线图的图表,通过右上角icon可以自由切换成柱状图,表格.在表格中遇到的一点小问题,解决方案如下: 1.场景重现 这是一个显示两个折线图的图表,一切看起来都很顺利.但是点 ...

  10. MVC-easyui-EF

    easyui+jQuery+MVC+EF的一个演示 环境:visual studio 2013+sql server 创建新项目:visual C# -> Web -> visual st ...