a.dat文件:
id,money
k001,5
k002,21
k003,30
k004,40
k002,20
b.dat文件:
id,money
k002,30
k005,49
k007,50
用java读取以上两个dat文件,统计相同id名下的money总和,并输出c.dat文件。
IO流,按行读取,字符串切割,map存储id和money,map中已经存在id则进行money累加,2个文件读取完成,输出map值到c.dat
把a.txt b.txt,c.txt 分别改为.dat就可以了
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Lianxi
{
static Map map=new HashMap();
public static void main(String[] args) throws IOException {
String line = null;
String a=null,a1 =null;
String b=null,b1 =null;
BufferedReader in = new BufferedReader(new FileReader("F:\\a.txt"));
while((line = in.readLine())!=null)
{
a=line.split(",")[0];
b=line.split(",")[1];
map.put(a, b);
}
BufferedReader in1 = new BufferedReader(new FileReader("F:\\b.txt"));
while((line=in1.readLine())!=null)
{
a1=line.split(",")[0];
b1=line.split(",")[1];
if(a1.equals("id"))
{
}
else
if(map.get(a1)!=null)
{ b= (String) map.get(a1);
map.remove(a1);
int temp=Integer.parseInt(b1)+Integer.parseInt(b);
map.put(a1, temp);
}
else
{
map.put(a1, b1);
}
}
StringBuffer str = new StringBuffer();
FileWriter fw = new FileWriter("F:\\c.txt", true);
Set set = map.entrySet();
Iterator iter = set.iterator();
while(iter.hasNext()){
Map.Entry entry = (Map.Entry)iter.next();
str.append(entry.getKey()+" , "+entry.getValue()+"\r\n");
}
fw.write(str.toString());
fw.close();
}
}
发现写错了、、、
下面是正确的
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Lianxi
{
static Map map=new HashMap();
public static void main(String[] args) throws IOException {
String line = null;
String a=null,a1 =null;
String b=null,b1 =null;
BufferedReader in = new BufferedReader(new FileReader("F:\\a.txt"));
while((line = in.readLine())!=null)
{
a=line.split(",")[0];
b=line.split(",")[1];
if(map.get(a)!=null)
{ b1= (String) map.get(a);
map.remove(a);
int temp=Integer.parseInt(b)+Integer.parseInt(b1);
String temp1=String.valueOf(temp);
map.put(a, temp1);
}
else
{
map.put(a, b);
}
}
BufferedReader in1 = new BufferedReader(new FileReader("F:\\b.txt"));
while((line=in1.readLine())!=null)
{
a1=line.split(",")[0];
b1=line.split(",")[1];
if(a1.equals("id"))
{
}
else
if(map.get(a1)!=null)
{ b= (String) map.get(a1);
map.remove(a1);
int temp=Integer.parseInt(b1)+Integer.parseInt(b);
// String temp1=String.valueOf(temp);
map.put(a1, temp);
}
else
{
map.put(a1, b1);
}
}
StringBuffer str = new StringBuffer();
FileWriter fw = new FileWriter("F:\\c.txt", true);
Set set = map.entrySet();
Iterator iter = set.iterator();
while(iter.hasNext()){
Map.Entry entry = (Map.Entry)iter.next();
str.append(entry.getKey()+" , "+entry.getValue()+"\r\n");
}
fw.write(str.toString());
fw.close();
}
}
文件内容少,可以用apache的FileUtils.readLines方法获取所有行集合,用POI写入excel
文件内容大,用IO流,按行读取,用POI写入excel