浏览 5196 次
锁定老帖子 主题:Java读取超大文本文件
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-20
由于之前没有进行过超大文件的读写,一开始以为需要使用分布式系统等复杂的操作才能进行。后来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时,增加一个分配缓存的参数即可 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-02-20
这。。。无论多大的文件读取, 跟语言没有什么关系吧。 这是OS的支持特性。 底层操作上, 只需要操作文件的移动指针就可以了。 要多看看OS IO函数。
|
|
返回顶楼 | |
发表时间:2011-02-20
sdh5724 写道 这。。。无论多大的文件读取, 跟语言没有什么关系吧。 这是OS的支持特性。 底层操作上, 只需要操作文件的移动指针就可以了。 要多看看OS IO函数。
|
|
返回顶楼 | |
发表时间:2011-02-20
有关系吧,还是需要看实现方式的。
|
|
返回顶楼 | |
发表时间:2011-02-20
不允许使用工具? 比如sqlload。读入1G文本几分钟。
|
|
返回顶楼 | |
发表时间:2011-02-20
有个问题:如果导入5m数据的时候,正好把某个数据给分割了,这不造成数据读取错误了嘛
|
|
返回顶楼 | |
发表时间:2011-02-20
sdh5724 写道 这。。。无论多大的文件读取, 跟语言没有什么关系吧。 这是OS的支持特性。 底层操作上, 只需要操作文件的移动指针就可以了。 要多看看OS IO函数。
java对文本的操作分为字节流和字符流两种,jvm采用的是不同的缓存策略。 |
|
返回顶楼 | |
发表时间:2011-02-20
smallboby 写道 不允许使用工具? 比如sqlload。读入1G文本几分钟。
噢,这个工具可以学习一下哈,不过这个文本不是sql语句。就是一行一行的文本,读取后需要用程序分析一下,然后把分析出来的元数据insert到数据库 |
|
返回顶楼 | |