有两个txt文件,一个存放的是id,另一个存放day,id,count,怎样把第一个id有的记录从第二个文件中找出来。

存到另一个文件第一个id1617704016299952984773162951001628177816292194162856421629922211724051162... 存到另一个文件
第一个
id
16177040
16299952
984773
16295100
16281778
16292194
16285642
16299222
11724051
16226915
12200946
16296982
16184534
15646876
16292273
15950502
16232037
12410228
15394939
10374231
15646423
16204591
16305551
15746656
16250591
11780049
16282374
16122285
11676458
16151676
11675365
第二个文件
id day count
20401,967360,10, 2
120401,967360,12, 1
120401,967360,13, 3
120401,967360,15, 3
120401,12421320,02, 3
120401,13294700,22, 5
120401,13292880,21, 2
120401,12421320,05, 4
120401,10021760,21, 21
120401,12669560,01, 4
120401,12669560,00, 4
120401,12669560,02, 2
120401,12669560,04, 1
120401,12669560,07, 2
120401,12669560,08, 8
120401,10025180,09, 1
120401,13355700,12, 1
120401,13355700,14, 6
120401,13355700,17, 1
120401,13355700,19, 8
120401,12136100,11, 1
120401,11788920,10, 1
120401,13365360,23, 30
120401,13365360,22, 16
120401,13365360,21, 22
详细代码
展开
 我来答
javaiswhat
2013-04-28 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:71.9万
展开全部
package Self;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class FileDemo {
public static void main(String[] args) {
BufferedReader br = null;
List<String> list = new ArrayList<String>();
String filepath1 = "E:\\1.txt";
String filepath2 = "E:\\2.txt";
System.out.println(" read file start...");
List<String[]> listres = new ArrayList<String[]>();
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(
filepath1)));
String temp = null;
while ((temp = br.readLine()) != null) {
try {
if (!temp.trim().equals("id"))
list.add(temp);//放第一个文件id对应的值
} catch (Exception e) {
e.printStackTrace();
}
}
br.close();
System.out.println(list.toString());
br = new BufferedReader(new InputStreamReader(new FileInputStream(
filepath2)));
while ((temp = br.readLine()) != null) {//读第二个文件的每一行
try {
if (temp.trim().indexOf("id")==-1) {//判断
String[] strs = temp.split(",");//分割每行的数据 如120401,12669560,02, 2
for (int i = 0; i < list.size(); i++) {
if (strs[1].trim().equals(list.get(i).trim())) {
//遍历list集合,找与分割的数组strs[1]第二个元素12669560有没有在list中
listres.add(strs);
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
for (int i = 0; i < listres.size(); i++) {
String[] str = listres.get(i);
for (int j = 0; j < str.length; j++) {
System.out.print(str[j] + " ");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
// System.out.println(listres.size());
System.out.println(" read file end ...");
}
}
追问
输出存到另一个文件
追答
String filepath3 = "E:\\3.txt";
for (int i = 0; i < listres.size(); i++) {
String[] str = listres.get(i);
for (int j = 0; j < str.length; j++) {
System.out.print(str[j] + " ");
}
System.out.println();
}
System.out.println("++++++++++++++++++++++++");
//将原来输出到控制台的写到文件中(filepath3)
String newline = System.getProperty("line.separator");//换行符号
bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(filepath3)));
for (int i = 0; i < listres.size(); i++) {
StringBuffer t = new StringBuffer();
String[] str = listres.get(i);
for (int j = 0; j < str.length; j++) {
if (j != str.length-1) {
t.append(str[j]).append(",");
} else {
t.append(str[j]);
}
}
System.out.println(t);
bw.write(t.append(newline).toString());
}
bw.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
if (bw != null)
bw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
System.out.println("end ...");
}
}
哥哥给分吧。亲测,可以过的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友845f74e61
2013-04-28 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1590万
展开全部
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) throws Exception {
File file1 = new File("1.txt");
File file2 = new File("2.txt");
File file3 = new File("3.txt");
List<String> list = new ArrayList<String>();
FileReader fr = new FileReader(file1);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
String line = br.readLine();
list.add(line);
}

br.close();
fr.close();

fr = new FileReader(file2);
br = new BufferedReader(fr);
FileWriter fw = new FileWriter(file3);
while (br.ready()) {
String line = br.readLine();
String[] array = line.split(",");
if (list.contains(array[0])) {
// System.out.println(line);
fw.write(line + "\r\n");
}
}

br.close();
fr.close();
fw.close();

}

}
追问
是把包含第一个文件id的记录取出来,不是全部
追答
是啊,比如
第一个
id
16177040
16299952
984773
第二个文件
id day count
16177040,967360,10, 2
120401,967360,12, 1
120401,967360,13, 3
120401,967360,15, 3

在第三个文件 中保存的就是

16177040,967360,10, 2
这一样,不是吗?
你运行了吗?我测试过了,是这样啊。
你不会第二列才是ID吧

如果是这样,
if (list.contains(array[0])) {

改成
if (list.contains(array[1])) {
就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhongtyler
2013-04-28 · TA获得超过4408个赞
知道大有可为答主
回答量:4384
采纳率:79%
帮助的人:893万
展开全部
1先读第二个文件
2 用splite把每行拆成数组。
3 利用数组第二个字段作为key,行的内容或者数组作为value,存入hashmap

读第一个文件,利用map差数据就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友37397c621
2013-04-28 · TA获得超过695个赞
知道小有建树答主
回答量:427
采纳率:100%
帮助的人:145万
展开全部
public static void main(String[] args) {
BufferedReader br = null;
List<String> list = new ArrayList<String>();
String filepath1 = "F:\\1.txt";
String filepath2 = "F:\\2.txt";
List<String[]> listres = new ArrayList<String[]>();
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(filepath1)));
String temp = null;
while ((temp = br.readLine()) != null) {
try {
if(!temp.trim().equals("id"))
list.add(temp);
} catch (Exception e) {
e.printStackTrace();
}
}
br.close();
br = new BufferedReader(new InputStreamReader(new FileInputStream(filepath2)));
while ((temp = br.readLine()) != null) {
try {
if(!temp.trim().startsWith("id")){
String[] strs = temp.split(",");
for (int i = 0; i < list.size(); i++) {
if(strs[1].trim().equals(list.get(i).trim())){
listres.add(strs);
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
for (int i = 0; i < listres.size(); i++) {
String[] str = listres.get(i);
for (int j = 0; j < str.length; j++) {
System.out.print(str[j]+" ");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(br != null)
br.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}

}
更多追问追答
追问
程序乱码了
追答
你再看看……提交的时候自动出现的空格符
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式