Java读取大文件

问题描述

java读取超大文件,(5G左右),并且每行读出来,需要处理下再重新写入一个文件,大家有碰到过的吗?求指点

解决方案

import java.io.*;public class ReadBigFileLineByLine{ public static void main(String[] args) { try{ //Big file to read String fileName = "MyBigFile.txt"; FileReader fileReader = new FileReader(fileName); BufferedReader bufferedReader = new BufferedReader(fileReader); String oneLine; while ((oneLine = bufferedReader.readLine()) != null) { System.out.println(oneLine); } bufferedReader.close(); }catch(Exception e){ System.out.println("Error while reading file:" + e.getMessage()); } }}
解决方案二:
大文件还是用内存映射吧,从FileChannel得到map来处理,代码就不贴了,一搜一大堆,没什么复杂的,你想想5g的文件,少做一次拷贝,效率会提高多少。。。
解决方案三:
读大文件一般用RandomAccessFile下手吧
解决方案四:
搞了半天的测试数据 数据量过大 电脑都卡住啦半天不能动 找了个类似的例子 看看对你有没有电帮助import java.io.*;import java.util.*;import java.io.FileInputStream;import java.io.FileOutputStream;import java.lang.String;import java.awt.*;////// Red//// public class Red {public static void main(String []args) throws IOException{ // int aac; //输出原文件 System.out.println("Program Beginning ... ..."); FileInputStream inStream = new FileInputStream("demo.txt"); //文件放在本程序的 int inread = inStream.available(); //同一文件目录下 byte inword[] = new byte[inread]; int bytesRead = inStream.read(inword,0,inread); System.out.println(new String(inword,0)); char ttc[] = new char[inread+2]; String readouts[] = new String[10]; System.out.println("..............................."); int cline = 0 ; int bline = 0 ; int eline = 0 ; //一次取一行将原文件内容归纳成按行存储的输入流 ttc[inread] = 13; ttc[inread+1] = 10; for(int i = 0 ; i < inread ; i++) { ttc[i] = (char) inword[i]; System.out.print(ttc[i]); if(ttc[i] == 10 || i == (inread-1)) { eline = i; if(i == (inread-1)) readouts[cline] = new String(ttc,bline,(eline-bline+3)); else readouts[cline] = new String(ttc,bline,(eline-bline+1)); bline = i+1; cline++; } } System.out.println(); System.out.println("..............................."); inStream.close(); //将每行的内容在屏幕上显示一遍 for(int l = 0 ; l < cline ; l++) { System.out.print(readouts[l]); } System.out.println(); //输入一空行。 //compare 按字典顺序对比,并按照顺序排序 String abba = new String(); for(int bn = 0 ; bn < cline-1 ; bn++) { for(int m = 0 ; m < cline-1-bn ; m++) { int duibi = readouts[m].compareTo(readouts[m+1]); if(duibi > 0 ) { abba = readouts[m]; readouts[m] = readouts[m+1]; readouts[m+1] = abba; } } } System.out.println("This documents 'flow' has been sort now..."); // cout the sort string 输出排好顺序的每行内容 for(int l = 0 ; l < cline ; l++) { System.out.print(readouts[l]); } ///write string in txt 输出一行...号 System.out.println("................."); // cout if documents exist判断文件是否存在,不存在则创建一新文件 File testtxt = new File(""); if(testtxt.exists() == false) { System.out.println("d.txt is not exist"); System.out.println("Creat new documents now....waiting....."); testtxt = new File("d.txt"); } else System.out.println("Have found the document " d.txt" "); if(testtxt.exists() == true) System.out.println("Creat "d.txt" successly...Congratulation!!!"); //利用新创立的文件,创建一个输出流,以方便写入文件 FileOutputStream outStream = new FileOutputStream("d.txt"); String houl = new String(); //将排好顺序的内容合并到一个字符串中 for(int i = 0 ; i < cline ; i++) { houl = houl+readouts[i]; } //打印该字符串 houl = houl+'n'; System.out.println(houl); System.out.println("begin store these data..."); //将此字符串的内容写入输出流所代表的文件 for (int i = 0 ; i < inread ; i++) { outStream.write(houl.charAt(i)); } //关闭输出流 outStream.close(); //创建一新的输入流,并在屏幕显示输入的内容。 System.out.println("This documents stored ok..!~~"); System.out.println("Program Beginning ... ..."); FileInputStream inStreamnew = new FileInputStream("d.txt"); int inreadnew = inStreamnew.available(); byte inwordnew[] = new byte[inreadnew]; int bytesReadnew = inStreamnew.read(inwordnew,0,inreadnew); System.out.println("This is a test for this program..."); System.out.println(new String(inwordnew,0)); //关闭输入流 inStreamnew.close();}}

时间: 2025-01-31 10:44:43

Java读取大文件的相关文章

java读取大文件简单实例

 这篇文章主要介绍了java读取大文件简单实例,有需要的朋友可以参考一下 我要从一个文本文件中提有用的数据  文本文件200多MB  是不是可以建一个缓存来把有用的数据一段一段的提出来,请问该怎么做?    JAVA中可以使用内存映射文件来操作大文件.  最大可达2GB.  下面是个简单的示例,更具体的自己看Java API DOCS或相关资料      代码如下: import java.io.*;  import java.nio.*;  import java.nio.channels.*

java读取大文件简单实例_java

我要从一个文本文件中提有用的数据 文本文件200多MB 是不是可以建一个缓存来把有用的数据一段一段的提出来,请问该怎么做? --------------------------------------------------------------- 呵呵,200MB而已... JAVA中可以使用内存映射文件来操作大文件. 最大可达2GB. 下面是个简单的示例,更具体的自己看Java API DOCS或相关资料 复制代码 代码如下: import java.io.*; import java.n

Java 读取大文件方法

需求:实际开发中读取文本文件的需求还是很多,如读取两个系统之间FTP发送文件,读取后保存到数据库中或日志文件的数据库中保存等. 为了测试首先利用数据库SQL生成大数据文件. 规则是 编号|姓名|手机号,如 10|张10|13900000010 利用下面语句可以生成10,000,000条数据. SELECT LEVEL||'|'||'张'||LEVEL||'|'||(13900000000+LEVEL)  FROM DUAL CONNECT BY LEVEL < 1000000; 实现如下: pa

nio-java读取大文件csv格式

问题描述 java读取大文件csv格式 有一个2g的文件,传统io读写可能出问题,所以我想用nio方法先分割,生成temp文件,然后读取每个temp. 但是因为这个文件里面一条record不是按照行来分隔,比较乱,要写代码去判断如何分隔. 有没有什么其他好的办法读取文件? 解决方案 按行读取,不会出问题的.按行读取的原理是遍历文件,遇到换行符返回一行数据,而不是全部装入内存后分割. 解决方案二: Java大文件读取java读取大文件Java读取大文件

java 通过apache ftp读取大文件或者下载大文件

问题描述 java 通过apache ftp读取大文件或者下载大文件 本人技术短,参照网上各位大侠的帖子写了登录ftp去读取ftp下面文件然后直接存进数据库的代码 ,但是我的代码只能读取一些小的文件,文件大点就报内存溢出.谁可以给个能在ftp上面下载大文件或者能够直接读取ftp服务器上面的大文件然后直接解析存进数据库的代码例子.不胜感激. 解决方案 内存溢出..说明内存方步下文件..ftp取到liu后写入文件吧...ps都内存溢出了..你不可能在内存中解析的..有可能是你jvm内存设置太小所致.

Java实现按行读取大文件_java

Java实现按行读取大文件 String file = "F:" + File.separator + "a.txt"; FileInputStream fis = new FileInputStream(file); RandomAccessFile raf = new RandomAccessFile(new File(file),"r"); String s ; while((s =raf.readLine())!=null){ Syste

Java高效读取大文件(转)

1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung(http://www.baeldung.com/) 上"Java--回归基础"系列教程的一部分. 2.在内存中读取 读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法: 1 2 3 Files.readLines(new File(path), Charsets.UTF_8);   FileUtils.readLines(new Fil

Java如何高效的读取大文件实例教程

       1.概述 本教程将演示如何用Java高效地读取大文件,这些大文件操作虽然不是很常用,但是如果有项目要用到的话就有用武之地了. 2.在内存中读取 读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法: Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new File(path)); 这种方法带来的问题是文件的所有行都被存放在内存

PHP如何快速读取大文件

在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较