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>
作者:楊凱專屬頻道
相關文章
- Java讀取Json檔案工具類JavaJSON
- Java讀取以.xlsx結尾的excel檔案,並寫出每張表對應的c#類、java類、儲存資料的xml檔案、讀取xml檔案的工具類JavaExcelC#XML
- Android工具類之檔案操作工具類Android
- java 檔案處理 工具類Java
- 檔案內容對比工具
- Java壓縮檔案生成工具類Java
- 工具類,關於手工讀取 properties檔案引數
- 比對檔案sam檔案的解讀
- MongoDB工具類:java操作對檔案的增刪查改MongoDBJava
- Javascript寫入txt和讀取txt檔案示例JavaScript
- java 上傳 下載檔案工具類Java
- Java檔案操作工具類FileUtilsJava
- Kaleidoscope for Mac Mac檔案對比工具Mac
- Beyond Compare for Mac(檔案比較對比工具)Mac
- Spring boot 獲取yml檔案工具類Spring Boot
- 檔案和影像比較工具Kaleidoscope
- 檔案對比工具:DirEqual mac啟用版Mac
- Java 對 properties 檔案操作 (ResourceBundle 類和 Properties 類)Java
- java檔案對照工具Java
- Android開啟指定檔案實踐 工具類Android
- 開發工具類-簡單檔案操作相關
- 類檔案結構_class類檔案的的結構
- Beyond Compare 4 for Mac,檔案對比同步工具Mac
- Mac檔案和影像比較工具:KaleidoscopeMac
- 檔案和影像比較工具:Kaleidoscope MacMac
- Kaleidoscope for Mac(檔案和影像比較工具)Mac
- 再談檔案讀寫:判斷檔案的幾種方法及其優劣對比
- Golang對檔案讀寫操作Golang
- Java —— 集合工具類(Collections 類)Java
- .ts檔案和d.ts檔案對比
- (slam工具)1檔案讀取和儲存SLAM
- Java —— 檔案類(File 類)Java
- 強大的檔案對比工具Beyond Compare 4 for MacMac
- Java™ 教程(管理原始檔和類檔案)Java
- java屬性檔案properties常用操作工具類Java
- Javaweb常用工具類及配置檔案備份JavaWeb
- 檔案的讀寫
- VisualDiffer for mac (檔案比較工具)Mac