84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
有一份10G以上大文本文件,需要替换里面的一些文本信息(每一行都有),如何高效读并替换掉生成新的文件
人生最曼妙的风景,竟是内心的淡定与从容!
先分割成多个文件
多个线程操作多个文件,避免两个线程操作同一个文件
按行读文件并按行写入新的文件
合并所有文件
1,4用linux命令就可以了~
File file = new File(filepath); BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file)); BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),510241024);String line = "";while((line = reader.readLine()) != null){
//进行替换操作和其他业务
}
为了提高性能,你可能需要 mapped IO,具体可以参考:
为何要在Java中使用内存映射文件(Memory Mapped File)或者MappedByteBuffer
java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
java.io和java.nio性能简单对比
如果是简单文本的替换,用linux的sed命令就行了。
如果是比较复杂的文本替换,看下面:
http://stackoverflow.com/ques...
http://www.baeldung.com/java-...
用spark分析、lines=sc.textFile("your_file");filterlines=lines.filter(your_filter_function)filterlines.xxx()
先分割成多个文件
多个线程操作多个文件,避免两个线程操作同一个文件
按行读文件并按行写入新的文件
合并所有文件
1,4用linux命令就可以了~
File file = new File(filepath);
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));
BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),510241024);
String line = "";
while((line = reader.readLine()) != null){
}
为了提高性能,你可能需要 mapped IO,具体可以参考:
为何要在Java中使用内存映射文件(Memory Mapped File)或者MappedByteBuffer
java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
java.io和java.nio性能简单对比
如果是简单文本的替换,用linux的sed命令就行了。
如果是比较复杂的文本替换,看下面:
http://stackoverflow.com/ques...
http://www.baeldung.com/java-...
用spark分析、
lines=sc.textFile("your_file");
filterlines=lines.filter(your_filter_function)
filterlines.xxx()