ggx1abc
gu123xin
2018-08-17 03:32
采纳率: 95.2%
浏览 834
已采纳

java以字符流的形式清洗超大文本

我用 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("D:\ccc.txt")),"UTF-8"));
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream),5*1024*1024);方式清洗大约2G的文本,也是会包内存不足图片说明
上面是清洗之前的
下面是清洗之后的图片说明
问了其他人,说字符流可以实现,要怎么实现,麻烦详细些,谢谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • zhaoxuyang1997
    z8g 2018-08-17 04:44
    已采纳

    楼主试试

     import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class QingXi {
        public static void main(String[]args) throws FileNotFoundException, IOException{
    
            String pathRead = "D:/test_input.txt";
            String pathWrite = "D:/test_output.txt";
    
            FileReader fr = new FileReader(pathRead);
            FileWriter fw = new FileWriter(pathWrite);
    
            BufferedReader br = new BufferedReader(fr);
            BufferedWriter wr = new BufferedWriter(fw);
    
            String line = br.readLine();
            while(line != null){
                String str = line.replaceAll("---", ",");
                wr.append(str);
                wr.append("\n");
    
                line = br.readLine();
            }
            wr.flush();
    
            wr.close();
            br.close();
            fw.close();
            fr.close();
        }
    }
    
    
    点赞 评论
  • qq_19917081
    qq_19917081 2018-08-17 03:40

    把文件拆成多个小文件,清洗完再合并,你这个用mr或者spark是最简单的

    点赞 评论
  • zhaomin_g
    _zming 2018-08-17 03:42

    应该跟这个流关系不大,可能是你代码其他地方导致的。buffered会使用缓存,5*1024*1024这个值可以改小点,这个流可以很方便的去取一行,你使用其他流
    就没这个方便了,需要直接取判断换行字符。

    点赞 评论
  • xcgh
    xcgh 2018-08-17 04:27

    字符流方式实现,按行读取
    https://www.cnblogs.com/xwlych/p/5987022.html

    点赞 评论
  • lroyzz
    lroyzz 2018-08-20 01:24

    首先你不能一次性就把一个大文件放到文件流 这一下就会有可能内存溢出
    第二,你其实可以不readline 可以readbyte 保证一次读取出来的数据是受限制的 readbyte也可以保证文字的准确性
    最后就是明明可以用一个流 你却用了嵌套流

    点赞 评论

相关推荐