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模式写入 ###################################################################合并数 ...
随机推荐
- CCEditBox/CCEditBoxImplAndroid
#ifndef __CCEDITBOXIMPLANDROID_H__ #define __CCEDITBOXIMPLANDROID_H__ #include "cocos2d.h" ...
- Block的使用--初探Block
看了两天的Block. 网上是有非常多解说与教程,也有讲得非常好的.这里就主要解说下我的理解与收获.欢迎拍砖. 所谓block.我觉得应该是一个闭包函数.而闭包,就是说block以及内部全部的变量生命 ...
- H5学习_番外篇_PHP数据库操作
1. 文件操作 1.1 打开关闭文件 fopen() resource fopen ( string filename, string mode [, bool use_include_path [, ...
- C++学习第一天--编译命令
前一个月的时间主要是在捯饬自己的ubuntu vim环境,昨天终于都搞好了,从今天开始,学习C++.至于为什么学习C++,其实很大一部分原因还是因为自己喜欢vim,又听说vim对C++的支持还不错,所 ...
- pycharm第一个Python程序
print ("Hello word!"); 这是Python3.xx的语法!
- 智课雅思词汇---十、pend是什么意思
智课雅思词汇---十.pend是什么意思 一.总结 一句话总结:[词根含义]:悬挂,垂;称量;支付 词根:-pend-, -pens- [词根含义]:悬挂,垂;称量;支付 [词根来源]:来源于拉丁语动 ...
- Linux FTP客户端
1.File Zilla File Zilla是一个开源的,跨平台的Linux FTP客户端.File Zilla有一个标签式的用户界面,允许用户查看正在传输的文件的所有细节.File Zilla是通 ...
- whatis---查询一个命令执行什么功能
whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上. whatis命令在用catman -w命令创建的数据库中查找command参数指定的命令.系统调用.库函数或特殊文件名.wh ...
- python通过sigar收集服务器信息
http://blog.csdn.net/mirahs/article/details/49681787
- C++调用Lua的性能測试
游戏服务器经典的架构就是C++和Lua的结合,C++开发主体框架.Lua实现一些复杂的逻辑.我们都知道Lua是一种很快的语言.可是究竟有多块.我们測试下看看. C++调用Lua的性能測试.发现不正确的 ...