java分别读取两个txt文件里的数据进行比较,分别列出这两个文件中共有的数据,并统计每种数据的数量

java分别读取两个txt文件里的数据进行比较,分别列出这两个文件中共有的和分别独有的数据,并统计每种数据有多少个。

1.txt
1234567788
4656789899
5678900890
4568899000
6788900099

2.txt
7889000900
7789900737
5678900890
4568899000

希望哪位大神帮帮忙,让比较完的结果显示如下:
1中有:5条;
2中有:4条;
共有:2条。

我就不给你写代码了,给你说下思路。

1.用BufferedReader
分别读取这2个文件,循环读取,一次读取1行
将读取的数据分别放入2个List中,分别为list1,list2。

定义变量sameCount,用于记录1,2都有的数据条数。
2.循环list1,取出其中的每一条,并与list2中对比,相同则sameCount++;

至于输出1,2中各有多少条数据就很简单了,就是list1.size()和list2.size();

给你一点代码提示:
BufferedRreader br = new BufferedReader(new FileReader(new File("1.txt"));
String temp = null;
List list1 = new ArrayList();

while((temp = br.readLline() ) != null) {
list1.add(temp);
}

br.close();

这就是读取1.txt的内容,并放入list1中。
因为你要分别读取1,2的内容,所以你可以将这段代码写一个方法。
参数为文件名和要放入的List。如:readFile(String filename,List list);

对比就不要我说了吧。readFile()这个方法调用2次,分别读取1,2数据后得到list1,list2。
接下来循环1吧。
定义变量Integer sameCount = 0;
for(String s : list1) {
for (String ss : list2) {
if (s.equals(ss)) {
sameCount++;
}
}
}

代码给你写的差不多了,望采纳。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-21
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class FileCompare {
public static void main(String[] args) throws IOException {
FileCompare c = new FileCompare();
c.compareFile();
}
public void compareFile(){
File file = new File("F:/1.txt");
File file2 = new File("F:/2.txt");
Set fileTextSet = new HashSet();
Set file2TextSet = new HashSet();
try {
getText(file,fileTextSet);
getText(file2,file2TextSet);
compareSet(fileTextSet, file2TextSet);
} catch (Exception e) {
e.printStackTrace();
}
}
private void compareSet(Set textSet,Set StextSet2){
int numOfCommon=0,numOfBase=0,numOfAdap=0;
for (Iterator iterator = textSet.iterator(); iterator.hasNext();) {
String name = (String) iterator.next();
if(StextSet2.contains(name)){
System.out.println("common:"+name);
numOfCommon++;
}else{
System.out.println("1:"+name);
}
numOfBase++;
}
for (Iterator iterator = StextSet2.iterator(); iterator.hasNext();) {
String name = (String) iterator.next();
if(!textSet.contains(name)){
System.out.println("2"+name);
}
numOfAdap++;
}
System.out.println("Common: " + numOfCommon);
System.out.println("1: " + numOfBase);
System.out.println("2: " + numOfAdap);
}
private void getText(File file,Set textSet) throws IOException {
BufferedReader br = null;
InputStream is = null;
try {
is = new FileInputStream(file);
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String lineStr = null;
while ((lineStr = br.readLine())!=null) {
String text = lineStr.substring(lineStr.indexOf(":"));//按照需求切分
textSet.add(text);
}
if(br!=null){
br.close();
}
if(is!=null){
is.close();
}
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
} finally {
if(br!=null){
br.close();
}
if(is!=null){
is.close();
}
}
}
}

差不多就是这个样子,中间有些变量自己改吧嗯本回答被提问者采纳
第2个回答  2013-03-20
package cc;
import java.io.BufferedReader;
import java.io.FileReader;
public class Cmp {
public static void main(String[] args) throws Exception {
BufferedReader br1 = new BufferedReader(new FileReader("1.txt"));
BufferedReader br2 = new BufferedReader(new FileReader("2.txt"));
int all = 0;
int l1=0, l2=0,i,j;
String str1[] = new String[100];
String str2[] = new String[100];
while ((str1[l1]=br1.readLine())!=null) l1++;
while ((str2[l2]=br2.readLine())!=null) l2++;
for (i=0;i<l1;i++) {
for (j=0;j<l2;j++) {
if (str1[i].compareTo(str2[j])==0) {
all ++;
}
}
}
System.out.println("1中有:" + (l1-all) + "条;");
System.out.println("2中有:" + (l2-all) + "条;");
System.out.println("共有:" + all + "条;");
br1.close();
br2.close();
}
}
第3个回答  2013-03-20
/**
*
*/
package com.piggg.baiduzhidao;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author piggsoft
* @2013-3-20
* @version 1.0
*/
public class Text {
public static Map<String, Integer> read(String path){
Map<String, Integer> map = new HashMap<String, Integer>();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(path));
String s;
while((s=reader.readLine())!=null){
if(map.containsKey(s))
map.put(s, map.get(s)+ 1);
else
map.put(s, 1);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return map;
}
public static Map<String, Integer> join(Map<String, Integer> text1, Map<String, Integer> text2){
Map<String, Integer> map = new HashMap<String, Integer>();
Set<String> keys = text2.keySet();
for(String key : keys){
if(text1.containsKey(key))
if(map.containsKey(key))
map.put(key, map.get(key) + 1);
else
map.put(key, 1);
}
return map;
}
public static void main(String[] args) {
Map<String, Integer> text1 = read("src/1.txt");
Map<String, Integer> text2 = read("src/2.txt");
Map<String, Integer> map = join(text1, text2);
System.out.println("1的:"+text1.size());
System.out.println("2的:"+text2.size());
System.out.println("相同的:"+map.size());
}
}
相似回答