工作上经常会遇到处理大数据的问题,下面两个工具类,是在处理大数据时编写的;推荐的是使用map的方式处理两个list数据,如果遇到list相当大数据这个方法就起到了作用,当时处理了两个十万级的list,使用改方法的变种搞定。

1.txt文件、list集合比较工具

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.hudong.util.other;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map; import org.apache.commons.lang.StringUtils; /**
* txt文件对比工具
* list集合比较工具
* @Title: TxtCompareUtil.java
* @Copyright: Copyright (c) 2005
* @author 杨凯
*/
public class TxtCompareUtil { /**
* 使用两个list包含来对比
*
* @param input1
* @param input2
* @param output1
* @param output2
*/
public static void compareTxt(String input1, String input2, String output1, String output2) { List<String> listInput1 = TxtReadWriteUtil.readTxt(input1);
List<String> listInput2 = TxtReadWriteUtil.readTxt(input2);
for (String str : listInput1) {
if (listInput2.contains(StringUtils.upperCase(str)) || listInput2.contains(StringUtils.lowerCase(str)) || listInput2.contains((str))) {
TxtReadWriteUtil.writerTXT(str, output1, true);
} else {
TxtReadWriteUtil.writerTXT(str, output2, true);
}
}
} /**
* 求两个list的交集 通过求交集的方法找出两个txt的共同部分
*
* @param input1
* @param input2
* @param output1
* @param output2
*/
public static void interseTxt(String input1, String input2, String output1, String output2) {
List<String> listInput1 = TxtReadWriteUtil.readTxt(input1);
List<String> listInput2 = TxtReadWriteUtil.readTxt(input2);
if (listInput2.retainAll(listInput1)) {
System.out.println(listInput2);
// TxtReadWriteUtil.writerTXT(listInput2, output1, true);
} else {
// TxtReadWriteUtil.writerTXT(listInput2, output2, true);
}
} /**
* 求两个list的并集 通过求两个list的并集来合并两个txt
*
* @param input1
* @param input2
* @param output1
* @param output2
*/
public static void unionTxt(String input1, String input2, String output1, String output2) {
List<String> listInput1 = TxtReadWriteUtil.readTxt(input1);
List<String> listInput2 = TxtReadWriteUtil.readTxt(input2);
listInput2.removeAll(listInput1); // 移除相同的
listInput2.addAll(listInput1); // 放入不同的
System.out.println(listInput2);
} /**
* 获取两个集合的不同元素
*
* @param collmax
* @param collmin
* @return
*/
@SuppressWarnings( { "unchecked" })
public static Collection getDiffent(Collection collmax, Collection collmin) {
// 使用LinkeList防止差异过大时,元素拷贝
Collection csReturn = new LinkedList();
Collection max = collmax;
Collection min = collmin;
// 先比较大小,这样会减少后续map的if判断次数
if (collmax.size() < collmin.size()) {
max = collmin;
min = collmax;
}
// 直接指定大小,防止再散列
Map<Object, Integer> map = new HashMap<Object, Integer>(max.size());
for (Object object : max) {
map.put(object, 1);
}
for (Object object : min) {
if (map.get(object) == null) {
csReturn.add(object);
} else {
map.put(object, 2);
}
}
for (Map.Entry<Object, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
csReturn.add(entry.getKey());
}
}
return csReturn;
} /**
* 获取两个集合的不同元素,去除重复
*
* @param collmax
* @param collmin
* @return
*/
@SuppressWarnings( {"unchecked"})
public static Collection getDiffentNoDuplicate(Collection collmax, Collection collmin) {
return new HashSet(getDiffent(collmax, collmin));
} public static void main(String[] args) {
unionTxt("e:/test/input1.txt", "e:/test/input2.txt", "e:/test/output1.txt", "e:/test/output1.txt");
}
}
</span>

2.读写文件的工具类

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.hudong.util.other;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List; import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; /**
* txt文件的读写操作工具
*
* @Title: TxtReadWriteUtil.java
* @Copyright: Copyright (c) 2005
* @author 杨凯
*/
public class TxtReadWriteUtil { /**
* 写txt 方式一
*
* @param conent
* @param txtPath
* @param isAppend
*/
public synchronized static void writerTXT(String conent, String txtPath, boolean isAppend) {
try {
File file = new File(txtPath);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(txtPath, isAppend);
BufferedWriter bw = new BufferedWriter(fileWriter);
bw.write(conent);
bw.newLine();
fileWriter.flush();
bw.close();
fileWriter.close(); } catch (Exception e) {
e.printStackTrace();
}
} /**
* 写txt 方式二
*
* @param file
* @param sb
*/
public static void createTxt(String file, StringBuffer sb) {
try {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gbk");
format.setExpandEmptyElements(true);
format.setTrimText(false);
FileOutputStream fos = new FileOutputStream(file);
XMLWriter xmlWriter = new XMLWriter(fos, format);
xmlWriter.write(sb.toString());
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 读txt
*
* @param filePath
* @return
*/
public static List<String> readTxt(String filePath) {
List<String> list = new ArrayList<String>();
try {
BufferedReader br = new BufferedReader(new FileReader(filePath));
String line = null;
while ((line = br.readLine()) != null) {
list.add(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}</span>

作者:杨凯专属频道

转载请指明:http://blog.csdn.net/yangkai_hudong

list集合、txt文件对比的工具类和文件读写工具类的更多相关文章

  1. ASP.NET CORE Linux发布工具(文件对比 只上传差异文件;自动启停WebServer命令;上传完成自动预热WebServer)

    最近这几日在搞一个小网站:教你啊 :(感兴趣的朋友可以来捧场,在这个网站上有任何消费我都可以退还) 由于更新频繁,手动更新特别麻烦,于是开发了这个小工具 用了一段时间,还是挺顺手的,同时.NET Co ...

  2. .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化

    1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...

  3. Jacob工具类使用文件互转服务 word转html html转excel word转pdf excel转pdf ppt转pdf

    前提条件  必须安装MS office 1.jdk使用jdk1.8 2.jacob.dll放在..\jdk1.8\jre\bin目录下 3.eclipse的jre版本要和jdk一致,window-&g ...

  4. JAVA 获取文件的MD5值大小以及常见的工具类

    /** * 获取文件的MD5值大小 * * @param file * 文件对象 * @return */ public static String getMD5(File file) { FileI ...

  5. Spring-Boot ☞ ShapeFile文件读写工具类+接口调用

    一.项目目录结构树 二.项目启动 三.往指定的shp文件里写内容 (1) json数据[Post] { "name":"test", "path&qu ...

  6. 工具类_JavaPOI_Office文件内容读取

    文件内容读取工具类,亲测可用 maven依赖: <dependency> <groupId>org.apache.poi</groupId> <artifac ...

  7. 文件对比工具Beyond Compare使用方法

    今天向大家介绍一个使用起来十分方便且功能十分强大的文件对比工具-Beyond Compare. 1    工具下载 工具的下载很简单,百度搜索Beyond Compare即可. 下载完成后,解压缩,双 ...

  8. 文件夹差异文件对比工具 meld

    /***************************************************************************************** * 文件夹差异文件 ...

  9. 超好用文件对比工具 – Beyond Compare

    超好用文件对比工具 – Beyond Compare,开发中文件.目录对比神器,有了它,再也不用为找不到修改的内容而发愁了. 具备的丰富实用功能: 并列比较文件夹.FTP 网站或 Zip 文件: 为以 ...

随机推荐

  1. 洛谷 P2196 挖地雷

    题目传送门 解题思路: 记忆化搜索,题目比较坑的地方在于,这是个有向图,给的边是单向边!!!!!!!! AC代码: #include<iostream> #include<cstdi ...

  2. JavaScript之基于原型链的继承

    本文介绍下js的OOP中的继承. 上图的要点为:Foo函数在创建时会自动生成内置属性prototype,而typeof Foo.prototype是object类型的. 上图的要点为:Foo.prot ...

  3. H3C S10512虚拟化配置

    软件版本:Version 7.1.070, Release 7585P05 1.配置SW1#设置SW1的成员编号为1,创建IRF端口2,并将它与物理接口Ten-G0/0/45.Ten-G0/0/46. ...

  4. mysql自关联和多表连接查询

    自关联操作         多表连接查询  inner  join 内查询   left  join  左查询   right  join  右查询                          ...

  5. [Security] Web Security Essentials

    In this course, we'll learn how to exploit and then mitigate several common Web Security Vulnerabili ...

  6. proto3 不支持内建类型的非空判断即 hasXXX

    proto3 移除了内建类型的非空判断方法 即代码生成工具不会为 bool int 等类型生成has方法 有使用过proto2 或者其它rpc 框架的人都知道使用has 方法去判断消息里的值是否设置, ...

  7. SpringBoot+SpringSecurity+jwt整合及初体验

    原来一直使用shiro做安全框架,配置起来相当方便,正好有机会接触下SpringSecurity,学习下这个.顺道结合下jwt,把安全信息管理的问题扔给客户端, 准备 首先用的是SpringBoot, ...

  8. OpenMP笔记(二)

    原文:https://www.bearoom.xyz/2019/02/18/openmp2/ OpenMP是由三部分组成的:指令.库函数和环境变量. 一.指令 在C/C++中使用OpenMP需要用到的 ...

  9. POJ 1655 Balancing Act【树的重心模板题】

    传送门:http://poj.org/problem?id=1655 题意:有T组数据,求出每组数据所构成的树的重心,输出这个树的重心的编号,并且输出重心删除后得到的最大子树的节点个数,如果个数相同, ...

  10. GCC常见命令汇总

    int main() { test(); } man.c如上: #include <stdio.h> void test() { printf("test\n"); } ...