我用 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的文本,也是会包内存不足
上面是清洗之前的
下面是清洗之后的
问了其他人,说字符流可以实现,要怎么实现,麻烦详细些,谢谢
楼主试试
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();
}
}
把文件拆成多个小文件,清洗完再合并,你这个用mr或者spark是最简单的
应该跟这个流关系不大,可能是你代码其他地方导致的。buffered会使用缓存,5*1024*1024这个值可以改小点,这个流可以很方便的去取一行,你使用其他流
就没这个方便了,需要直接取判断换行字符。
字符流方式实现,按行读取
https://www.cnblogs.com/xwlych/p/5987022.html
首先你不能一次性就把一个大文件放到文件流 这一下就会有可能内存溢出
第二,你其实可以不readline 可以readbyte 保证一次读取出来的数据是受限制的 readbyte也可以保证文字的准确性
最后就是明明可以用一个流 你却用了嵌套流