大文件读写

Posted 告别的时代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大文件读写相关的知识,希望对你有一定的参考价值。

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

 

以上是关于大文件读写的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段13——Vue的状态大管家

linux下c通过虚拟地址映射读写文件的代码

17 大文件的读写

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

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

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