需求:实际开发中读取文本文件的需求还是很多,如读取两个系统之间FTP发送文件,读取后保存到数据库中或日志文件的数据库中保存等。

为了测试首先利用数据库SQL生成大数据文件。

规则是 编号|姓名|手机号,如 10|张10|13900000010

利用下面语句可以生成1,000,000条数据。生成的数据保存到 D:\\test\\customer_info.txt 文件里面。

  1. SELECT LEVEL||'|'||'张'||LEVEL||'|'||(13900000000+LEVEL) FROM DUAL CONNECT BY LEVEL < 1000000;

利用Java程序读取刚生成的文件。

实现如下:

  1. package com.test.common.util;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileReader;
  8. import java.io.IOException;
  9. import java.util.Scanner;
  10.  
  11. import org.apache.commons.io.FileUtils;
  12. import org.apache.commons.io.LineIterator;
  13.  
  14. public class HandleTextFile {
  15.  
  16. // 使用commons-io.jar包的FileUtils的类进行读取
  17. public static void readTxtFileByFileUtils(String fileName) {
  18. File file = new File(fileName);
  19. try {
  20. LineIterator lineIterator = FileUtils.lineIterator(file, "UTF-8");
  21. while (lineIterator.hasNext()) {
  22. String line = lineIterator.nextLine();
  23. System.out.println(line);
  24. }
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29.  
  30. // 使用Scanner进行读取
  31. public static void readTxtByScanner(String fileName) {
  32. FileInputStream fileInputStream = null;
  33. Scanner scanner = null;
  34.  
  35. try {
  36. fileInputStream = new FileInputStream(fileName);
  37. scanner = new Scanner(fileInputStream, "UTF-8");
  38. while (scanner.hasNext()) {
  39. String line = scanner.nextLine();
  40. System.out.println(line);
  41. }
  42. } catch (FileNotFoundException e) {
  43. e.printStackTrace();
  44. } finally {
  45. if (fileInputStream != null) {
  46. try {
  47. fileInputStream.close();
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. if (scanner != null) {
  53. scanner.close();
  54. }
  55. }
  56.  
  57. }
  58.  
  59. // 使用cache进行读取
  60. public static void readTxtByStringBuffer(String fileName) throws IOException {
  61. File file = new File(fileName);
  62.  
  63. BufferedReader reader = null;
  64.  
  65. try {
  66. reader = new BufferedReader(new FileReader(file), 10 * 1024 * 1024);
  67. String stringMsg = null;
  68. while ((stringMsg = reader.readLine()) != null) {
  69. System.out.println(stringMsg);
  70. }
  71. reader.close();
  72. } catch (FileNotFoundException e) {
  73. e.printStackTrace();
  74. }
  75. }
  76.  
  77. public static void main(String[] args) {
  78. try {
  79. HandleTextFile.readTxtByStringBuffer("D:\\test\\customer_info.txt");
  80. } catch (IOException e) {
  81. e.printStackTrace();
  82. }
  83. }
  84. }

参考文件:读取大文件性能测试

Java 读取大文件方法的更多相关文章

  1. java读取 500M 以上文件,java读取大文件

    java 读取txt,java读取大文件 设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址 来源博客http://yijianfengvip.blog.163.c ...

  2. java 读取txt,java读取大文件

    java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File;import java.io.RandomAccessFile;i ...

  3. java读取大文件 超大文件的几种方法

    java 读取一个巨大的文本文件既能保证内存不溢出又能保证性能       import java.io.BufferedReader; import java.io.File; import jav ...

  4. Java读取大文件的高效率实现

    1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung (http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分. 2.在内存中读取 ...

  5. java读取大文件

    1  多线程 2  java内存映射读取大文件

  6. java读取大文件内容到Elasticsearch分析(手把手教你java处理超大csv文件)

    现在需要快算分析一个2g的csv文件: 基于掌握的知识,使用java按行读取文件,批量导入数据到es, 然后利用es强大的聚合能力分析数据,2个小时搞定! package com.example.de ...

  7. 解决java读取大文件内存溢出问题

    1. 传统方式:在内存中读取文件内容 读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法: Files.readLines(new ...

  8. java 分次读取大文件的三种方法

    1. java 读取大文件的困难 java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作.例如 Path path = Paths.get("file path&qu ...

  9. Java多线程读取大文件

    前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋 ...

随机推荐

  1. [python]pip常用命令(转载)

    用阿里云服务器,使用pip安装第三方库的时候卡的要死.所以我就想pip能不能安装本地的包. 找到了这篇博客: http://me.iblogc.com/2015/01/01/pip%E5%B8%B8% ...

  2. List<?>和List<T>的区别?

    出自:https://www.zhihu.com/question/31429113

  3. JavaScript---DOM文档

    DOM文档中,每个节点都有一些重要的属性: 最重要的是nodeType,它描述该节点是什么---元素(element).属性(attribute).注释(comment).文本(text)或者其他几种 ...

  4. 【C#】线程协作式取消

    Microsoft .Net Framework 提供了一个标准的取消操作的模式.这个模式是协作式的,意味着你想取消的操作必须显示地支持取消. CLR为我们提供了两个类: System.Threadi ...

  5. csharp: SDK:CAPICOM

    http://www.microsoft.com/zh-cn/download/details.aspx?id=25281 //************************************ ...

  6. LGLProgressHUD

    不想用第三方的指示器,感觉有点大,自己写了一个简单的活动指示器,目前只有两种效果.效果如图 第一种: 第二种 第二种可以随着提示文字的增多而变长 LGLProgressHUD.h // // LGLP ...

  7. CentOS修改服务器系统时间

    linux安装完毕后,一般都是国外的世界,一点都不方便设置任务,或者导致网站获取本地的时间错乱,所以就需要把服务器的时间改为和本地时间一致,也就是换成中国的时间. 第一条指令:date –s '201 ...

  8. PEM (Privacy Enhanced Mail) Encoding

    PEM (Privacy Enhanced Mail) Encoding The moPEM (Privacy Enhanced Mail) Encoding The most commonly us ...

  9. c#反射获取常量属性名以及其值(真正可用)

    最近因为要开发rpc平台的c#客户端,其中部分常量类为了自动加载的map,需要反射解析出静态常量,往上搜了一堆,都各种的不靠谱. 亲自研究了下,如下: Type t = typeof(SpiderEr ...

  10. spring bean加载顺序指定方式之一

    在某些情况下,我们在容器启动的时候做一些事情,举个例子,加载缓存等.. 此时我们会希望某个bean先被加载并执行其中的afterpropertiesset方法. 因为spring默认是通过contex ...