nio实现文件读取写入数据库或文件
1.nio实现读取大文件,之后分批读取写入数据库
2.nio实现读取大文件,之后分批写入指定文件
- 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();
- }
- }
- }
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实现文件读取写入数据库或文件的更多相关文章
- PostgreSql那点事(文件读取写入、命令执行的办法)
• 2013/07/9 作者: admin PostgreSql那点事(文件读取写入.命令执行的办法) 今天无意发现了个PostgreSQL环境,线上学习了下,一般的数据注射(读写数据库)差异不大,不 ...
- xml文件读取到数据库
xml文件读取到数据库 第一步,导包 c3p0,dom4j,jaxen,MySQL-connector 第二步 xml文件,config文件 第三步 javabean 第四步 c3p0的工具类 ...
- Excel 读取写入数据库
// Excel 读取写入数据库 // 3.8版本的poi 4.0 可以不用写 parseCell 这个方法,可以直接赋值 STRING 类型 import org.apache.poi.hss ...
- SpringBoot读取Linux服务器某路径下文件\读取项目Resource下文件
// SpringBoot读取Linux服务器某路径下文件 public String messageToRouted() { File file = null; try { file = Resou ...
- (OAF)jdeveloper集成log4j并将日志输出到指定文件并写入数据库
参考: How to configure Log4j in JDev 11g Ever wanted to use log4j in your adf project ? Well though Or ...
- python向config、ini文件读取写入
config读取操作 cf = configparser.ConfigParser() # 实例化对象 cf.read(filename) # 读取文件 cf.sections() # 读取secti ...
- html外部文件读取/写入
1.文件的读取 外部文件读取控件: <input type="file" id="file_jquery" onchange="file_jqu ...
- python学习笔记6-输入输出与文件读取写入
(1)打印到屏幕:print (2)读取键盘输入:input/raw_input #键盘输入 str = raw_input("Please enter:"); print (&q ...
- shell cat 合并文件,合并数据库sql文件
> 覆盖写入 >> append模式写入 ###################################################################合并数 ...
随机推荐
- mysql-基础和基本指令
基础: 1.数据库模式:简单的说:就是一个数据库用户所拥有的数据库的对象. 比如scott用户建立了表,索引,视图,存储过程等对象,那么这些对象就构成了schema scott .有时用作数据 ...
- Sqlite3的安装Windows
- 区间dp学习笔记
怎么办,膜你赛要挂惨了,下午我还在学区间\(dp\)! 不管怎么样,计划不能打乱\(4\)不\(4\).. 区间dp 模板 为啥我一开始就先弄模板呢?因为这东西看模板就能看懂... for(int i ...
- Hadoop框架基础(二)
** Hadoop框架基础(二) 上一节我们讨论了如何对hadoop进行基础配置已经运行一个简单的实例,接下来我们尝试使用eclipse开发. ** maven安装 简单介绍:maven是一个项目管理 ...
- css 添加滚动条
代码: <template> <div class="w" style="scrollbar-arrow-color:yellow;scrollbar- ...
- Benelux Algorithm Programming Contest 2014 Final(第二场)
B:Button Bashing You recently acquired a new microwave, and noticed that it provides a large number ...
- ResNet(深度残差网络)
注:平原改为简单堆叠网络 一般x是恒等映射,当x与fx尺寸不同的时候,w作用就是将x变成和fx尺寸相同. 过程: 先用w将x进行恒等映射.扩维映射或者降维映射d得到wx.(没有参数,不需要优化器训练) ...
- HDU-1225 Football Score 模拟问题(水题)
题目链接:https://cn.vjudge.net/problem/HDU-1225 水题 代码 #include <algorithm> #include <string> ...
- Intel投入5亿美元提升14nm工艺CPU需求
虽然14nm行将收尾,但是却有大量的客户在赶“末班车”,导致CPU供货告急. Intel年初宣布增加10亿美元的额外资本支出用于转向更新的.更先进的生产工具,以便增加产能,在本周的第39届纳斯达克投资 ...
- 关于memset赋最值
出处[辗转山河弋流歌 by 空灰冰魂] blog.csdn.net/vmurder/article/details/46537613 memset(a, 0x3f, sizeof(a)) //int, ...