大文件读写

    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;  

    public class FileSplit
    {
        public static void main(String[] args) throws IOException
        {
            long timer = System.currentTimeMillis();
            int bufferSize = 20 * 1024 * 1024;//设读取文件的缓存为20MB  

            //建立缓冲文本输入流
            File file = new File("/media/Data/毕业设计/kdd cup/数据/userid_profile.txt");
            FileInputStream fileInputStream = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
            InputStreamReader inputStreamReader = new InputStreamReader(bufferedInputStream);
            BufferedReader input = new BufferedReader(inputStreamReader, bufferSize);  

            int splitNum = 112-1;//要分割的块数减一
            int fileLines = 23669283;//输入文件的行数
            long perSplitLines = fileLines / splitNum;//每个块的行数
            for (int i = 0; i <= splitNum; ++i)
            {
                //分割
                //每个块建立一个输出
                FileWriter output = new FileWriter("/home/haoqiong/part" + i + ".txt");
                String line = null;
                //逐行读取,逐行输出
                for (long lineCounter = 0; lineCounter < perSplitLines && (line = input.readLine()) != null; ++lineCounter)
                {
                    output.append(line + "\r");
                }
                output.flush();
                output.close();
                output = null;
            }
            input.close();
            timer = System.currentTimeMillis() - timer;
            System.out.println("处理时间:" + timer);
        }
    }  

方法2

void largeFileIO(String inputFile, String outputFile) {
        try {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(inputFile)));
            BufferedReader in = new BufferedReader(new InputStreamReader(bis, "utf-8"), 10 * 1024 * 1024);//10M缓存
            FileWriter fw = new FileWriter(outputFile);
            while (in.ready()) {
                String line = in.readLine();
                fw.append(line + " ");
            }
            in.close();
            fw.flush();
            fw.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
时间: 2024-08-04 17:04:01

大文件读写的相关文章

java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. MappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高.NIO最主要的就是实现了对异步操作的支持.其中一种通过把一个套接字通道(SocketChannel)注册到一个选择器(Selector)中,不时调用后者的选择(select)方法就能返回满足的选择键(SelectionKey

【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射

内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码.fileChannel.map(FileChannel.MapMode mode, long position, long size)将此通道的文件区域直接映射到内存中.注意,你必须指明,它是从文件的哪个位置开始映射的,映射的范围又有多大:也就是说,它还可以映射一个大文件的某个小片断. MappedByteB

jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一个客户可以对应多个订单,一个订单只属于一个客户! * 建表原则: * 在多的一方创建一个字段,作为外键指向一的一方的主键!!! * 多对多: * 一个学生可以选择多个课程,一个课程也可以被多个学生选择! * 建表原则: * 创建第三张表,第三张表中放入两个字段,作为外键分别指向多对多双方的主键! *

文件流读写、大文件移动 FileStream StreamWriter

文件流读写 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace _09文件流 { class Program { static void Main(string[] args) { //string msg = "飞流直下三千尺"; ////字符串转字节数组 //byte[] buffer = System.Tex

perl对大量大文件进行读写

在对大量文件进行读写时,最好将文件存为gz文件,可以节约读写硬盘的时间,硬盘也不会那么卡. 在写gz文件时,最好使用PerlIO::gzip模块.这个模块不用调用gzip命令,减少了程序占用的线程数量,可以有效的降低load. 下面是一个例子. #! /usr/bin/env perl use strict; use warnings; use List::Util; use FileHandle; use PerlIO::gzip; my %fh; my @a=(1..100); for(my

读写文件:每次读入大文件里的一行、读写.CSV文件

读文件: 传统的读法.所有读出,按行处理: fp=open("./ps.txt", "r"); alllines=fp.readlines(); fp.close(); for eachline in alllines: print eachline 推荐读取方法,使用文件迭代器 , 每次仅仅读取和显示一行.读取大文件时应该这样: fp=open("./ps.txt", "r"); for eachline in fp: pr

17 大文件的读写

1.大文件的读写方法 2.字符流的使用方法 字符流:读写文件时以字符为基础 字节输入流:Reader  <-----FileReader int read(char [] c,int off,int len) 字节输出流:Writer  <------FileWriter void write(char [] c,int off,int len) class Test { public static void main(String args[]) { //声明输入流引用 FileInputS

大数据【二】HDFS部署及文件读写(包含eclipse hadoop配置)

一 原理阐述 1' DFS 分布式文件系统(即DFS,Distributed File System),指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.该系统架构于网络之上,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂. 2' HDFS 借此,关于GFS和HDFS的区别与联系查看 我于博客园找到的前辈的博客>>http://www.cnblogs.com/liango/p/7136448.html HDFS(Hadoop Dis

java filechannel大文件的读写

java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/ java 读取一个巨大的文本文件既能保证内存不溢出又能保证性能 2010-09-25 11:18:50|  分类: 默认分类 |字号 订阅 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.