论坛首页 入门技术论坛

Java读取超大文本文件

浏览 5196 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-02-20  
近日由于相关业务,需要读取一个将近1G的文件,然后将符合条件的数据insert进数据库。而执行完程序之后,最后写入数据库的数据是将近100w条,在linux系统下运行时间将近3个小时,操作量还是上了一个相当的规模。

由于之前没有进行过超大文件的读写,一开始以为需要使用分布式系统等复杂的操作才能进行。后来google了一下,发现jdk本身就支持超大文件的读写,真是虚惊一场。
网上的文章基本分为两大类,一类是使用BufferedReader类读写超大文件;另一类是使用RandomAccessFile类读取,经过比较,最后使用了前一种方式进行超大文件的读取,下面是相关代码,其实很简单
File file = new File(filepath);   
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));    
BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024);// 用5M的缓冲读取文本文件  
		
String line = "";
while((line = reader.readLine()) != null){
//TODO: write your business
}

注意代码,在实例化BufferedReader时,增加一个分配缓存的参数即可
   发表时间:2011-02-20  
这。。。无论多大的文件读取, 跟语言没有什么关系吧。 这是OS的支持特性。 底层操作上, 只需要操作文件的移动指针就可以了。 要多看看OS IO函数。
0 请登录后投票
   发表时间:2011-02-20  
sdh5724 写道
这。。。无论多大的文件读取, 跟语言没有什么关系吧。 这是OS的支持特性。 底层操作上, 只需要操作文件的移动指针就可以了。 要多看看OS IO函数。

0 请登录后投票
   发表时间:2011-02-20  
有关系吧,还是需要看实现方式的。
0 请登录后投票
   发表时间:2011-02-20  
不允许使用工具? 比如sqlload。读入1G文本几分钟。
0 请登录后投票
   发表时间:2011-02-20  
有个问题:如果导入5m数据的时候,正好把某个数据给分割了,这不造成数据读取错误了嘛
0 请登录后投票
   发表时间:2011-02-20  
sdh5724 写道
这。。。无论多大的文件读取, 跟语言没有什么关系吧。 这是OS的支持特性。 底层操作上, 只需要操作文件的移动指针就可以了。 要多看看OS IO函数。

java对文本的操作分为字节流和字符流两种,jvm采用的是不同的缓存策略。
0 请登录后投票
   发表时间:2011-02-20  
smallboby 写道
不允许使用工具? 比如sqlload。读入1G文本几分钟。

噢,这个工具可以学习一下哈,不过这个文本不是sql语句。就是一行一行的文本,读取后需要用程序分析一下,然后把分析出来的元数据insert到数据库
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics