存到另一个文件
第一个
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
详细代码
输出存到另一个文件
追答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 ...");
}
}
哥哥给分吧。亲测,可以过的
是把包含第一个文件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])) {
就可以了。
程序乱码了
追答你再看看……提交的时候自动出现的空格符
追问谢谢,最后把输出记录写入到另一个文件,代码
追答public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
List list = new ArrayList();
String filepath1 = "F:\\1.txt";
String filepath2 = "F:\\2.txt";
String filepath3 = "F:\\res.txt";
List listres = new ArrayList();
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();
}
}
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filepath3)));
for (int i = 0; i < listres.size(); i++) {
String[] str = listres.get(i);
String t = null;
for (int j = 0; j < str.length; j++) {
t += str[j] + " ";
}
System.out.println(t);
bw.write(t);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
if (bw != null)
bw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
没换行,而且还有null
追答换行bw.write(t+"\n");这样就行,有null是认为没有找到相匹配的信息,把这个String t = null;改成String t = "";这样就行了
追问是把包含第一个文件id的记录取出来,不是全部 匹配的记录存起来
追答先把第一个文件的Id全部都取出来,和第二个文件的第二列(也就是如120401,12136100,11, 1中的12136100)进行对比,如果相等则把这条记录(120401,12136100,11, 1)保存在文件中…………………………
追问就是这样,代码怎么实现
追答不知道这样写你能不能看明白了
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
//用于保存ID
List list = new ArrayList();
//存放ID的文件
String filepath1 = "F:\\1.txt";
//存放要匹配的信息的文件
String filepath2 = "F:\\2.txt";
//将找到的信息保存到该文件中
String filepath3 = "F:\\res.txt";
try {
//获得第一个文件的输入流
br = new BufferedReader(new InputStreamReader(new FileInputStream(
filepath1)));
String temp = null;
//读取第一个文件
while ((temp = br.readLine()) != null) {
try {
//去掉第一行ID标识
if (!temp.trim().equals("id"))
list.add(temp);
} catch (Exception e) {
e.printStackTrace();
}
}
//关闭第一个文件的输入流
br.close();
//获得第二个文件输入流
br = new BufferedReader(new InputStreamReader(new FileInputStream(
filepath2)));
//获得结果文件的输出流,用于把结果写入文件
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filepath3)));
//读取第二个文件
while ((temp = br.readLine()) != null) {
try {
//如果读到数据不是以id开头的,则进行下面的操作
if (!temp.trim().startsWith("id")) {
//以逗号侵害字符串
String[] strs = temp.split(",");
for (int i = 0; i < list.size(); i++) {
//用所有的ID来和从第二个文件中得到的ID循环匹配,如果存在,则写入文件并打印在控制台,然后跳出循环,接着读取下一条记录
if (strs[1].trim().equals(list.get(i).trim())) {
bw.write(temp+"\n");
System.out.println(temp);
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
if (bw != null)
bw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
Access中如何同时删除两个表中ID相同的记录
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)and rowid not in (select min(rowid) from people group by people...
SQL求助 我有2条记录,有一个字段的值不一样 我现在想查询的时候
paraid为你的参数,otherid为另一行的标识 其实这个用存储过程就简单了,if else 既可
Access中如何同时删除两个表中ID相同的记录
重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1) 3、查...
...确定唯一一条记录但是现在出现很多重复记录如何删除多余的呢...
第二种方法每次只删除重复中ID最大的一条记录。delete from table where id in ( select max(id) from table group by name having count(*)>1)4、SQL程序删除 declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having...
SQL查询.取两个表ID相同的数据!!高手进!!
select title,pagepath,id,moditime,title_color,isoutlink,relate_key,author,count from news,news_count where checked=true and classid="&classid&" and id=articleid order by id desc 不知道你是不是这个意思
ACCESS中统计一个表的字段值在另一个表中的记录数量
题主可以参考下列SQL语句:假设表结构如下 t1(id,val1)t2(id,val2)列出t1每一个唯一的val1在t2表val2中出现的次数 select a.val1,count(1) as 数量 from (select distinct val1 from t1) a,t2 b where a.val1=b.val2 group by a.val1;...
一个表中的ID有多个记录,把所有这个ID的记录查出来,并显示共有多少条...
1、在电脑上打开一张EXCEL表格,可以看到该表格中有多个数据记录。2、选中表格第一行的表头,点击菜单栏的数据,然后找到数据工具下的筛选按钮点击。3、可以看到第一行的表头有了下拉箭头,点击下拉箭头可以看到多个ID号码。4、如需要查询ID为31的记录,则勾选31后点击确定按钮。5、即可看到EXCEL表格中...
ACCESS中统计一个表的字段值在另一个表中的记录数量
题主可以参考下复列制SQL语句:假设表结构如下 t1(id,val1)t2(id,val2)列出t1每一个唯一的val1在知t2表val2中出现的道次数 select a.val1,count(1) as 数量 from (select distinct val1 from t1) a,t2 b where a.val1=b.val2 group by a.val1;
sql根据某一个字段重复只取第一条数据
重复记录是根据单个字段(teamId)来判断,只留有rowid最小的记录 delete from team where teamName in(select teamName from team group by teamName having count(teamName) > 1)and teamId not in (select min(teamId) from team group by teamName having count(teamName)>1)...
两个ID相同时间不同的数据,怎么取出时间最大的那个值
如数据 id time 1 2015-08-01 00:00:00 1 2015-08-02 00:00:00 2 2015-08-03 00:00:00 2 2015-08-04 00:00:00 执行:select a.* from 表名 a,(select id,max(time) time from 表名 group by id) bwhere a.id=b.id and a.time=b.time;执行结果:id ...