我有一个文本文件,我需要根据标识符读取并将其分组并创建多个文本文件。我在我之前的项目中使用了RandomAccessFile,Filereader,但我需要你提供线索以达到以下要求。如果我得到逻辑来根据一般细节对记录行进行分组,我将能够编写代码。
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||| | |
依旧......
请帮助我找出我需要的文件阅读器以及如何实现逻辑。分隔符将是每列的管道,分隔符将是每行的结束行。
答案 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();
}