a.dat文件:
id,money
k001,5
k002,21
k003,30
k004,40
k002,20b.dat文件:
id,money
k002,30
k005,49
k007,50用java读取以上两个dat文件,统计相同id名下的money总和,并输出c.dat文件。
求完整代码!跪求!

解决方案 »

  1.   


    /*
    a.dat文件:
    id,money
    k001,5
    k002,21
    k003,30
    k004,40
    k002,20b.dat文件:
    id,money
    k002,30
    k005,49
    k007,50
    */
    import java.util.Scanner;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.Files;
    import java.util.HashMap;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;import java.util.Iterator;
    import java.util.Set;import java.io.IOException;
    import java.nio.channels.WritableByteChannel;
    import static java.nio.file.StandardOpenOption.*;
    import java.nio.ByteBuffer;public class Test{
    public static void main(String[] args)throws Exception{
    Path pathA = Paths.get(System.getProperty("user.dir")).resolve("a.dat");
    Path pathB = Paths.get(System.getProperty("user.dir")).resolve("b.dat");
    Scanner fileA = new Scanner(pathA);
    Scanner fileB = new Scanner(pathB);
    HashMap<String,Integer> result = new HashMap<>();
    String regex = "^(?<key>k\\d+),(?<value>\\d+)$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = null;
    String content,key;
    Integer value;
    for(;fileA.hasNextLine();){
    content = fileA.nextLine();
    matcher = pattern.matcher(content);
    if(matcher.matches()){
    key = matcher.group("key");
    value = Integer.valueOf(matcher.group("value"));
    if(result.containsKey(key)){
    result.put(key,result.get(key) + value);
    }else{
    result.put(key,value);
    }
    }
    } for(;fileB.hasNextLine();){
    content = fileB.nextLine();
    matcher = pattern.matcher(content);
    if(matcher.matches()){
    key = matcher.group("key");
    value = Integer.valueOf(matcher.group("value"));
    if(result.containsKey(key)){
    result.put(key,result.get(key) + value);
    }else{
    result.put(key,value);
    }
    }
    } Set<String> keySet = result.keySet();
    Iterator<String> keys = keySet.iterator();

    Path pathC = Paths.get(System.getProperty("user.dir")).resolve("c.dat");
    ByteBuffer buffer = null; try(WritableByteChannel channel = Files.newByteChannel(pathC,WRITE,CREATE);){
    while(keys.hasNext()){
    key = keys.next();
    buffer = ByteBuffer.wrap(String.format("%s,%s",key,result.get(key) + System.lineSeparator()).getBytes());
    channel.write(buffer);
    }
    }catch(IOException e){
    e.printStackTrace();
    }
    }
    }