教新手使用java如何对一个大的文本文件内容进行去重
目录
- 有内存溢出风险的写法:
- 总结
有内存溢出风险的写法:
public static void distinct() {File ff = new File("G://password/all.txt"); File distinctedFile = new File("G://password/all-distinced.txt"); PrintWriter pw = null; Set allHash = null; FileReader fr = null; BufferedReader br = null; try {pw = new PrintWriter(distinctedFile); allHash = new HashSet(); fr = new FileReader(ff); br = new BufferedReader(fr); String line = null; while((line=br.readLine())!=null){line = line.trim(); if(line != ""){allHash.add(line); }}} catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } finally {try {if(null != fr){fr.close(); }} catch (IOException e) {e.printStackTrace(); }try {if(null != br){br.close(); }} catch (IOException e) {e.printStackTrace(); }}for(String s:allHash){pw.println(s); }pw.close(); }
【教新手使用java如何对一个大的文本文件内容进行去重】jvm内存溢出:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.HashMap.newNode(HashMap.java:1734) at java.util.HashMap.putVal(HashMap.java:630) at java.util.HashMap.put(HashMap.java:611) at java.util.HashSet.add(HashSet.java:219) at encode.Main.distinct(Main.java:180) at encode.Main.main(Main.java:215)
通过hashCode取模拆分写法:
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.HashSet; import java.util.Set; public class DistinctFileUtil { /*** 将文件hash取模之后放到不同的小文件中* @param targetFile 要去重的文件路径* @param splitSize 将目标文件切割成多少份hash取模的小文件个数* @return*/ public static File[] splitFile(String targetFile,int splitSize){File file = new File(targetFile); BufferedReader reader = null; PrintWriter[] pws = new PrintWriter[splitSize]; File[] littleFiles = new File[splitSize]; String parentPath = file.getParent(); File tempFolder = new File(parentPath + File.separator + "test"); if(!tempFolder.exists()){tempFolder.mkdir(); }for(int i=0; i unicSet = new HashSet(); for(int i=0; i
总结 本篇文章的内容就到这了,希望大家可以喜欢,也希望大家可以多多关注脚本之家的其他精彩内容!
推荐阅读
- 慢慢的美丽
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- “成长”读书社群招募
- 石头巷;名垂青史的廉政教材
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询