我一直在网上搜索但无济于事。
我的问题是我有一个包含
等文本的日志文本文件2014-03-04 08:28:45 1WKkiT-0008Qr-M9 Message received from xx (1.2.3.41) T="q"
2014-03-04 08:28:45 1WKkiT-0008Qr-M9 Message was delivered to xxxH=xxx[11.11.11.1] C="250 Queued (0.000 seconds)"
2014-03-04 08:28:45 1WKkiT-0008Qr-M9 Completed
2014-03-04 08:28:45 1WKkiT-0008Qr-M9 DKIM: d=x=relaxed/relaxed a=rsa-sha1 t=1393921721 [verification succeeded]
2014-03-04 08:29:12 1WKkit-0005cD-UZ Message received from x x T="x"
2014-03-04 08:29:12 1WKkit-0005cD-UZ Message was delivered to xxxH=x xxx C="250 Queued (0.000 seconds)"
2014-03-04 08:29:12 1WKkit-0005cD-UZ Completed
实际文件要大得多。
我想要的是逐块读取整个文件(空白行作为分隔符),然后将每个块写入另一个预先制作的文本文件中。
我目前正在使用BufferedReader
和BufferedWriter
,但与使用这些内容的想法并不相同。
非常感谢任何帮助,谢谢
答案 0 :(得分:2)
我认为这就是你想要的:
BufferedReader reader = new BufferedReader(new FileReader("text.txt"));
String line = null;
ArrayList<String> block = new ArrayList<String>();
String tmp="";
while ((line = reader.readLine()) != null) {
if(line.equals(""))
{
block.add(tmp);
tmp="";
}
else
{
tmp = tmp + line;
}
}
block.add(tmp);
reader.close();
System.out.println(block.size());
System.out.println(block.toString());
只需运行for循环即可将其复制到另一个文本文件中。
替换
tmp = tmp + line";
与
tmp = tmp + line+"\n";
如果您希望您的字符串与源文件的格式相同
答案 1 :(得分:2)
这是使用StringBuilder
和简单循环的解决方案。您可以根据自己的需要进行调整!
public List<String> extractBlocks(File file) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
StringBuilder block = new StringBuilder();
List<String> blocks = new ArrayList<String>();
while ((line = reader.readLine()) != null) {
if (line.isEmpty()) {
blocks.add(block.toString());
block = new StringBuilder();
} else {
block.append(line);
}
}
blocks.add(block.toString());
reader.close();
return blocks;
}