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

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

1.txt
1234567788
4656789899
5678900890
4568899000
6788900099

2.txt
7889000900
7789900737
5678900890
4568899000

希望哪位大神帮帮忙,让比较完的结果显示如下:
1中有:5条;
2中有:4条;
共有:2条。
展开
 我来答
冰火两重天
2013-03-20 · TA获得超过1425个赞
知道小有建树答主
回答量:1489
采纳率:0%
帮助的人:988万
展开全部
我就不给你写代码了,给你说下思路。

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++;
}
}
}

代码给你写的差不多了,望采纳。
mkopji
推荐于2017-09-21
知道答主
回答量:28
采纳率:0%
帮助的人:12.9万
展开全部
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();
}
}
}
}

差不多就是这个样子,中间有些变量自己改吧嗯
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pardream941026
2013-03-20 · TA获得超过8216个赞
知道大有可为答主
回答量:4602
采纳率:89%
帮助的人:1306万
展开全部
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();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
等待III希望
2013-03-20 · TA获得超过161个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:124万
展开全部
/**
*
*/
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());
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式