list集合、txt文件对比的工具类和文件读写工具类
工作上经常会遇到处理大数据的问题,下面两个工具类,是在处理大数据时编写的;推荐的是使用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文件对比的工具类和文件读写工具类的更多相关文章
- ASP.NET CORE Linux发布工具(文件对比 只上传差异文件;自动启停WebServer命令;上传完成自动预热WebServer)
最近这几日在搞一个小网站:教你啊 :(感兴趣的朋友可以来捧场,在这个网站上有任何消费我都可以退还) 由于更新频繁,手动更新特别麻烦,于是开发了这个小工具 用了一段时间,还是挺顺手的,同时.NET Co ...
- .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化
1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...
- 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 ...
- JAVA 获取文件的MD5值大小以及常见的工具类
/** * 获取文件的MD5值大小 * * @param file * 文件对象 * @return */ public static String getMD5(File file) { FileI ...
- Spring-Boot ☞ ShapeFile文件读写工具类+接口调用
一.项目目录结构树 二.项目启动 三.往指定的shp文件里写内容 (1) json数据[Post] { "name":"test", "path&qu ...
- 工具类_JavaPOI_Office文件内容读取
文件内容读取工具类,亲测可用 maven依赖: <dependency> <groupId>org.apache.poi</groupId> <artifac ...
- 文件对比工具Beyond Compare使用方法
今天向大家介绍一个使用起来十分方便且功能十分强大的文件对比工具-Beyond Compare. 1 工具下载 工具的下载很简单,百度搜索Beyond Compare即可. 下载完成后,解压缩,双 ...
- 文件夹差异文件对比工具 meld
/***************************************************************************************** * 文件夹差异文件 ...
- 超好用文件对比工具 – Beyond Compare
超好用文件对比工具 – Beyond Compare,开发中文件.目录对比神器,有了它,再也不用为找不到修改的内容而发愁了. 具备的丰富实用功能: 并列比较文件夹.FTP 网站或 Zip 文件: 为以 ...
随机推荐
- 《C Primer Plus》- 第一章 初试C语言
本笔记写于2020年1月25日. 从今天开始,我要全面的.彻底的将未来计划中所有的知识重新规划学习一遍,并整理成一套全面的笔记体系.为我将来的职业打下坚实的基础.而所有的一切从C语言开始. 本系列文章 ...
- Python中的常用内置对象之map对象
如果你了解云计算的最重要的计算框架Mapreduce,你就对Python提供的map和reduce对象有很好的理解,在大数据面前,单机计算愈加力不从心,分布式计算也就是后来的云计算的框架担当大任,它提 ...
- ACwing算法基础课听课笔记(第一章,基础算法一)(二分)
二分法: 在看这个视频前,我对于二分法是一头雾水的,又加上这个算法平常从来没写过所以打了一年了还没正式搞过.视频提到ACwing上的一道题,我用自以为聪明的方法去做,结果TLE了,实在丢人,不说了,开 ...
- 汪慧和201771010123《面向对象程序设计JAVA》第四周实验总结
第一部分:理论知识学习部分 1.类 类(class)是具有相同属性和行为的一组对象的集合,是构造程序的基本单元,是构造对象的模板或蓝图. 2.对象 对象:即数据,对象有三个特性——1.行为 2.状态 ...
- Qt在vs2010下的配置
https://blog.csdn.net/chenbang110/article/details/7607250 首先不要使用中文目录, 1 下载Qt的安装包和VS2010的Qt插件 2. 安装Qt ...
- Python基础学习一
Python基础学习一 1.变量与常量 变量名:大小写英文.数字.下划线的组合,数字不能开头 常量名:习惯上常量用大写字母命名,例如"PI" 2.多行输出 转义符:反斜杠(),如果 ...
- Scrapy连接到各类数据库(SQLite,Mysql,Mongodb,Redis)
如何使用scrapy连接到(SQLite,Mysql,Mongodb,Redis)数据库,并把爬取的数据存储到相应的数据库中. 一.SQLite 1.修改pipelines.py文件加入如下代码 # ...
- 模板编程里class 与 typename 的区别
大部分情况下可以相互替换,但是某些情况class 无法替代typename,例如 template< class T, class U > std::shared_ptr<T> ...
- 远程SSH服务使用指南
Author Email Yaoyao Liu yaoyaoliu@msn.com 本文所有教程以ubuntu为例,对其他unix内核系统如Debian.CentOS.macOS等也适用. 目录 安装 ...
- sol - 0x60,61,62
[例题]走廊泼水节 设当前扫描到边x,y,长度为z,x所处的并查集为Sx,y所处的并查集为Sy: 对于任意u属于Sx,v属于Sy,我们可以知道u,v之间必连一条边 但是我们要在保证x,y之间的边属于唯 ...