从文件中获取前两行,将其作为键和整个文件作为hashmap的值

  • 本文关键字:文件 的值 hashmap 获取 两行 java
  • 更新时间 :
  • 英文 :


现在考虑两个输入文件

1.post_tran.tbl (编辑表)

[name]post_tran_id[/name]=[data] 1[/data]
[name]tran_nr[/name]=[data]2[/data]
[name]datetime_tran_local[/name]=[data]2002-04-02 19:02:28[/data]
[name]system_trace_audit_nr[/name]=[data]008497[/data]
[name]settle_amount_rsp[/name]=[data]4120[/data]
[name]settle_tran_fee_rsp[/name]=[data]10[/data]
[name]post_tran_cust_id[/name]=[data] 2[/data]
[name]prev_post_tran_id[/name]=[data] 0[/data]
[name]next_post_tran_id[/name]=[data]0[/data]
[name]message_type[/name]=[data]0200[/data]
[name]post_tran_id[/name]=[data] 2[/data]
[name]tran_nr[/name]=[data]2[/data]
[name]datetime_tran_local[/name]=[data]2002-04-02 19:02:28[/data]
[name]system_trace_audit_nr[/name]=[data]008497[/data]
[name]settle_amount_rsp[/name]=[data]4120[/data]
[name]settle_tran_fee_rsp[/name]=[data]10[/data]
[name]post_tran_cust_id[/name]=[data] 2[/data]
[name]prev_post_tran_id[/name]=[data] 0[/data]
[name]next_post_tran_id[/name]=[data]0[/data]
[name]message_type[/name]=[data]0200[/data]

2.post_tran_cust.tbl

[name]post_tran_cust_id[/name]=[data]1[/data]
[name]source_node_name[/name]=[data]TestSrc[/data]
[name]draft_capture[/name]=[data]0[/data]
[name]pan[/name]=[data]5892790010003952[/data]
[name]card_seq_nr[/name]=[data]NULL[/data]
[name]expiry_date[/name]=[data]0415[/data]
[name]post_tran_cust_id[/name]=[data]2[/data]
[name]source_node_name[/name]=[data]SrcDec[/data]
[name]draft_capture[/name]=[data]1[/data]
[name]pan[/name]=[data]5892790010003952[/data]
[name]card_seq_nr[/name]=[data]890[/data]
[name]expiry_date[/name]=[data]0816[/data]

这些是我需要处理的示例文件。BELOW是示例代码。该代码包含2个hashmaps。一个hashmap是用于post_tran.tbl,其中包含前2行的数据值作为哈希图的键,而值是前两个行的相应整个记录。第二Hashmap用于Post_tran_cust,其中包含第一行的数据值作为Hashmap的键,并且值与第一行相对应。现在,我想比较键(对于第一个hashmap,我只需要post_tran_cust_id)
在两个hashmaps上,即hashmap1和post_tran_cust_id post_tran_cust_id
来自hasmp2。如果存在匹配,则来自这两个hashmap均应写入文件中。这是我的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
public class Migrator {
void migrate(String post_tran, String post_tran_cust) throws IOException {
        Map<String, Map<String, String>> h1 = loadFile(post_tran, KEY1);
        Map<String, Map<String, String>> h2 = loadFile(post_tran_cust, 
KEY2);
        // System.out.println("Hash Post_Tran................n: " + h1);
        // System.out.println("Hash Post_Tran_Cust................n: " + 
h2);
        PrintStream out = new 
PrintStream("D:\Postcard_workspace_new\Final\final.tbl");
        // PrintStream out = System.out; // Used during testing
        for (Map.Entry<String, Map<String, String>> entry : h1.entrySet()) {
            Map<String, String> data = entry.getValue();
            if (h2.containsKey(data.get(KEY2))) {
                print(out, KEY1, data.get(KEY1));
                print(out, KEY2, data.get(KEY2));
                // Print remaining rows in any order
                for (String key : data.keySet()) {
                    if ( ! key.equals(KEY1) && ! key.equals(KEY2) ) {
                        print(out, key, data.get(key));
                    }
                }
                data = h2.get(data.get(KEY2));
                for (String key : data.keySet()) {
                    if ( ! key.equals(KEY2) ) {
                        print(out, key, data.get(key));
                    }
                }
                out.println(); // Record separator
            }
        }
    }
private Map<String, Map<String, String>> loadFile(String fileName, String 
key) throws IOException {
        Map<String, Map<String, String>> result = new HashMap<String, 
Map<String, String>>();
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String line;
        do {
            Map<String, String> data = new HashMap<String, String>();
            while ((line = br.readLine()) != null && !line.isEmpty()) {
                data.put(getKey(line), getData(line));
            }
            result.put(data.get(key), data);
        } while (line != null);
        br.close();
        return result;
    }
  public static void main(String[] args) throws IOException {
    Migrator mg = new Migrator();
      mg.migrate("post_tran.tbl","post_tran_cust.tbl");
   }
  }

以下假设空线确实是空的,即没有空格等,并且在开始时没有空线。

由于我现在更多地了解您要做的事情,所以我在此更新中重新制作了很多逻辑。

没有特定的错误处理以使其更简单。

public class Migrator {
    private static final String KEY1 = "post_tran_id";
    private static final String KEY2 = "post_tran_cust_id";
    void migrate(String post_tran, String post_tran_cust) throws IOException {
        Map<String, Map<String, String>> h1 = loadFile(post_tran, KEY1);
        Map<String, Map<String, String>> h2 = loadFile(post_tran_cust, KEY2);
        PrintStream out = new PrintStream("final.tbl");
        for (Map.Entry<String, Map<String, String>> entry : h1.entrySet()) {
            Map<String, String> data = entry.getValue();
            String k = data.get(KEY2);
            if (k != null && h2.containsKey(k.trim())) {
                print(out, KEY1, data.get(KEY1));
                print(out, KEY2, data.get(KEY2));
                // Print remaining rows in any order
                for (String key : data.keySet()) {
                    if ( ! key.equals(KEY1) && ! key.equals(KEY2) ) {
                        print(out, key, data.get(key));
                    }
                }
                data = h2.get(k.trim());
                for (String key : data.keySet()) {
                    if ( ! key.equals(KEY2) ) {
                        print(out, key, data.get(key));
                    }
                }
                out.println(); // Record separator
            }
        }
    }
    private void print(PrintStream out, String key, String data) {
        out.print("[name]");
        out.print(key);
        out.print("[/name]");
        out.print("=");
        out.print("[data]");
        out.print(data);
        out.print("[/data]");
        out.println();
    }
    private Map<String, Map<String, String>> loadFile(String fileName, String key) throws IOException {
        Map<String, Map<String, String>> result = new HashMap<String, Map<String, String>>();
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String line;
        do {
            Map<String, String> data = new HashMap<String, String>();
            while ((line = br.readLine()) != null && !line.isEmpty()) {
                data.put(getKey(line), getData(line));
            }
            result.put(data.get(key).trim(), data);
        } while (line != null);
        br.close();
        return result;
    }
    private String getKey(String line) {
        String[] tokens = line.split("=");
        int length = tokens[0].length();
        return tokens[0].substring(6, length - 7);
    }
    private String getData(String line) {
        String[] tokens = line.split("=");
        int length = tokens[1].length();
        return tokens[1].substring(6, length - 7);
    }
    public static void main(String[] args) throws IOException {
        Migrator mg = new Migrator();
        mg.migrate("post_tran.tbl", "post_tran_cust.tbl");
    }
}

最新更新