0 0

Java读取大文件5

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

4个答案 按时间排序 按投票排序

0 0

采纳的答案

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());
                }

        }
}

2014年5月19日 17:59
0 0

大文件还是用内存映射吧,从FileChannel得到map来处理,代码就不贴了,一搜一大堆,没什么复杂的,你想想5g的文件,少做一次拷贝,效率会提高多少。。。

2014年5月20日 09:46
0 1

读大文件一般用RandomAccessFile下手吧

2014年5月19日 22:10
0 1

搞了半天的测试数据 数据量过大 电脑都卡住啦半天不能动 找了个类似的例子 看看对你有没有电帮助

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();
}
}

2014年5月19日 19:47

相关推荐

    Java读取大文件的处理

    Java读取大文件的处理 Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是...

    java读取大文件大全

    ### Java读取大文件技术详解 #### 一、引言 在Java开发中,处理大文件是一项常见的任务,尤其在数据分析、日志处理等领域尤为重要。本文将深入探讨如何使用Java来高效地读取大文件,并提供一个具体的示例代码进行...

    java读取大文件

    `RandomAccessFile`类提供了随机访问文件的能力,可以读写文件的任意位置。在这里,它与`FileChannel`一起使用,用于创建`MappedByteBuffer`。 4. **FileChannel**: `FileChannel`是`RandomAccessFile`的一个...

    java按行读取大文件并解析入库

    在Java编程中,处理大容量文本文件是一项挑战,因为传统的逐行读取方式可能会消耗大量内存,导致程序崩溃。为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行...

    完美解决java读取大文件内存溢出的问题

    完美解决java读取大文件内存溢出的问题 在Java中读取大文件时,内存溢出是一个常见的问题。传统方式的读取文件方式会将整个文件读取到内存中,导致程序抛出OutOfMemoryError异常。但是,我们可以通过行迭代方式来...

    java读取csv例子

    Java读取CSV例子 Java读取CSV例子是通过使用javacsv-2.0.jar包来实现的。javacsv-2.0.jar包提供了CsvReader和CsvWriter两个类,分别用于读取和写入CSV文件。在本例子中,我们将展示如何使用javacsv-2.0.jar包来...

    java读取文件方法大全

    ### Java读取文件方法大全:读取File流等技术 在Java中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`...

    java 读取文件 文件读取操作

    在Java编程语言中,文件读取是常见的任务,可以用于处理各种类型的数据,如文本、图像、音频等。本文将详细介绍Java中四种不同的文件读取方法:按字节读取、按字符读取、按行读取以及随机读取。 1. **按字节读取...

    java读取局域网共享机器文件

    要实现Java读取局域网共享文件,主要涉及以下步骤和知识点: 1. **网络路径表示**:Java中,网络路径通常以UNC(Universal Naming Convention)格式表示,形如`\\hostname\shared_directory\file.txt`。这里`...

    java读取mpp文件

    `mpxj`是一个开源的Java库,专门用于读取和写入Microsoft Project文件,包括MPP格式。这个库提供了丰富的API,使得开发者可以在Java应用中方便地操作这些项目管理文件。 首先,让我们详细了解一下如何在Java中使用`...

    java读取TXT文件入库

    以上就是使用Java读取TXT文件并将其内容存入数据库的基本步骤。根据实际需求,可能还需要处理异常、优化性能(如批处理SQL)、验证数据格式等细节问题。在处理大规模数据时,考虑使用多线程或者流式处理来提高效率。

    java读写csv文件,中文乱码问题

    2. **Java读取CSV文件**: - 使用`BufferedReader`和`InputStreamReader`组合,可以指定字符编码读取文件。例如: ```java FileInputStream fis = new FileInputStream("path_to_file.csv"); InputStreamReader ...

    Java读取TIFF文件

    本篇文章将深入探讨如何使用Java来读取TIFF文件,并获取其尺寸——即图像的宽度(长)和高度。 在Java中,处理TIFF文件通常需要借助第三方库,因为Java的标准API(如`java.awt.image.BufferedImage`)并不直接支持...

    详解Java无需解压直接读取Zip文件和文件内容

    "Java读取Zip文件和文件内容" Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面...

    java如何读取文件

    本文将详细解析如何使用Java读取文本文件,基于提供的代码示例,深入探讨其工作原理及最佳实践。 ### Java读取文本文件的基础 在Java中,读取文件主要依赖于`java.io`包中的类,如`FileReader`和`BufferedReader`...

    java读取shp文件代码

    ### Java读取SHP文件及DBF属性的关键技术解析 #### 概述 在地理信息系统(GIS)领域,Shapefile是一种常见的矢量数据格式,用于存储地理位置信息及相关属性数据。一个完整的Shapefile由多个文件组成,包括.shp、....

    JAVA实现远程文件读取

    JAVA实现远程文件读取 JAVA是一种广泛应用于软件开发的编程语言,随着网络技术的发展,JAVA也提供了许多支持远程文件读取的功能,本文将详细介绍JAVA实现远程文件读取的知识点。 1. Socket 编程 在JAVA中,Socket...

    java读取配置文件

    在Java编程中,读取配置文件是常见的任务,特别是在开发需要灵活配置的系统时。配置文件通常用于存储应用程序的设置,如数据库连接信息、服务器端口、第三方服务的API密钥等,这些信息可能需要根据不同的环境或需求...

    java读取excel之xlsl超大文件

    标题"java读取excel之xlsl超大文件"所涉及的核心知识点是优化大量数据的读取策略。在Java中,可以使用Apache POI的SXSSF API(Streaming Usermodel API)来实现这种优化。与常规的XSSF API不同,SXSSF允许我们以流的...

Global site tag (gtag.js) - Google Analytics