根据标识符读取文本文件并创建另一组文本文件

时间:2013-02-21 06:44:26

标签: java

我有一个文本文件,我需要根据标识符读取并将其分组并创建多个文本文件。我在我之前的项目中使用了RandomAccessFile,Filereader,但我需要你提供线索以达到以下要求。如果我得到逻辑来根据一般细节对记录行进行分组,我将能够编写代码。

Collat​​eral.txt

General Details|S|!|!|66T4049|N|
Charge Details|S|!|!|66T4049| 3825|
Charge Details|S|!|!|66T4049| 3826|
Machinery Details|S|!|!|66T4049|N|
General Details|S|!|!|66T4050|N|
Immovable Property Details|S|!|!|66T4050|N|
US_CIPD|66T4050|N|S156284|02-01-2013 00:58:50|
General Details|S|!|!|66T4050|N|IMUSD|I||| | |
Immovable Property Details|S|!|!|66T4050|N|IMUSD|
US locale Immovable Property Details|66T4050|N|
General Details|S|!|!|66T4051|N|MACH|M||| | |
General Details|S|!|!|66T4051|N|MACH|M||| | |
Charge Details|S|!|!|66T4051| 3827|N|        
Charge Details|S|!|!|66T4051| 3828|N| 
Insurance Details|S|!|!|66T4051|   1|Y|
Insurance Details|S|!|!|66T4051|   2|Y|
Inspection Details|S|!|!|66T4051| 1846|N|
Inspection Details|S|!|!|66T4051| 1845|N|
Ownership and Tenancy Details|66T4051|  329|0
Ownership and Tenancy Details|66T4051|  328|0

机械详情| S |!|!| 66T4051 | N | MACH | 123 | 55 | 其他抵押品详情| 66T4051 | N | 01 | __14P |

常规详细信息是父键。根据一般细节,根据条件收费细节,将包括机械细节,保险详情和其他细节。

我需要将一个常规细节组合在一起并创建新文件。我们可以说。

Collateral1.txt
General Details|S|!|!|66T4049|N|
Charge Details|S|!|!|66T4049| 3825|
Charge Details|S|!|!|66T4049| 3826|
Machinery Details|S|!|!|66T4049|N|


Collateral2.txt
General Details|S|!|!|66T4050|N|
Immovable Property Details|S|!|!|66T4050|N|
US_CIPD|66T4050|N|S156284|02-01-2013 00:58:50|


Collateral3.txt
General Details|S|!|!|66T4050|N|IMUSD|I||| | |
Immovable Property Details|S|!|!|66T4050|N|IMUSD|
US locale Immovable Property Details|66T4050|N|


Collateral4.txt
General Details|S|!|!|66T4051|N|MACH|M||| | |

依旧......

请帮助我找出我需要的文件阅读器以及如何实现逻辑。分隔符将是每列的管道,分隔符将是每行的结束行。

2 个答案:

答案 0 :(得分:1)

这样做的一个想法是:

1)逐行读取源文件。
2)从该行提取密钥
3)使用地图存储密钥(上面提取)和值作为该密钥的文件的引用 4)在地图中搜索关键字并获取文件参考
   如果匹配,则将上述行添加到此文件中    否则创建一个新文件,将此行添加到这个新创建的文件中,将该键和此文件引用放在地图中以供下次使用 5)继续上面直到你到达档案的最后。
6)关闭所有创建的文件

希望这会有所帮助!!

答案 1 :(得分:0)

好的,所以当您看到以特定字符串开头的行时,您似乎只需要启动一个新文件。这听起来很容易:

String prefix = "GeneralDetails|"; // Or whatever you want it to be
BufferedReader reader = new BufferedReader(new InputStreamReader(
    new FileInputStream("input.txt"), "UTF-8")); // Specify the charset here
try {
    int outputIndex = 0;
    BufferedWriter writer = null;
    try {
        String line;
        while ((line = reader.readLine() != null) {
            // Check whether we need to start a new file, closing the old one.
            if (writer == null || line.startsWith(prefix)) {
                if (writer != null) {
                    writer.close();
                }
                outputIndex++;
                string path = "Collateral " + outputIndex + ".txt";
                // Specify the output encoding here
                writer = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(path), "UTF-8")); 
            }
            writer.write(line);
            writer.newLine();
        } else {
        }
    } finally {
        if (writer != null) {
            writer.close();
        }
    }
} finally {
    reader.close();
}