java - 如何使用正则表达式解析文本文件并将结果写入 Java 中的另一个文件
问题描述
我使用正则表达式解析文本文件以使用生成的第一组和第二组,如下所示:
- 将第二组写入另一个文件
- 将其命名为第一组
不幸的是,文件上没有写入任何数据!我没有弄清楚问题出在哪里,这是我的代码:
package javaapplication5;
import java.io.*;
import java.util.regex.*;
public class JavaApplication5 {
public static void main(String[] args) {
// TODO code application logic here
try {
FileInputStream fstream = new FileInputStream("C:/Users/Welcome/Desktop/End-End-Delay.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
File newFile1= new File("C:/Users/Welcome/Desktop/AUV1.txt");
FileOutputStream fos1= new FileOutputStream(newFile1);
BufferedWriter bw1= new BufferedWriter(new OutputStreamWriter(fos1));
String strLine;
while ((strLine = br.readLine()) != null) {
Pattern p = Pattern.compile("sender\\sid:\\s(\\d+).*?End-End\\sDelay:(\\d+(?:\\.\\d+)?)");
Matcher m = p.matcher(strLine);
while (m.find()) {
String b = m.group(1);
String c = m.group(2);
int i = Integer.valueOf(b);
if(i==0){
System.out.println(b);
bw1.write(c);
bw1.newLine();
}
System.out.println(b);
// System.out.println(c);
}
}
}
catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}
这里的任何人都可以帮我解决这个问题并识别它吗?
解决方案
您正在使用 BufferedWriter,并且永远不会刷新(刷新写入器将内容推送到磁盘上)您的写入器,甚至在程序结束时关闭它。
因此,在您的内容从 BufferedWriter 写入磁盘上的实际文件之前,程序退出并且内容丢失。
为避免这种情况,您可以在 bw1 中写入内容后立即调用 flush,
bw1.write(c);
bw1.newLine();
bw1.flush();
或者
在您的程序结束之前,您应该调用,
bw1.close(); // this ensures all content in buffered writer gets push to disk before jvm exists
不建议在每次写入数据时调用flush,因为它违背了缓冲写入的目的。
所以最好是关闭缓冲的写入器对象。你可以通过两种方式
- 尝试资源
- 最后手动关闭缓冲的写入器对象,可能在 finally 块中,以确保它被调用。
除此之外,您还需要确保您的正则表达式匹配您的条件,
if(i==0){
被执行否则在文件中写入数据的代码将不会被执行,当然在这种情况下不会在文件中发生写入。
此外,强烈建议关闭您打开的任何资源,如文件资源、数据库(连接、语句、结果集)资源等。
希望有帮助。
推荐阅读
- ios - Visual Studio mac,xamarin,没有显示模拟器
- spring - java.lang.IllegalArgumentException:区域设置部分“en-US,en;q=0.9”包含无效字符]
- video - 使用 FFmpeg 模糊 MP4 视频部分 x 秒
- javascript - 如何使用 Node.js 从 Dropbox 下载大文件?
- python - 在 keras 中使用带有 LSTM 的 CNN 时,池化层是强制性的吗?
- c# - 使用 MVC 在 EF 中的 SqlQuery 返回 -1
- php - PHP - 将重复值组合在一个数组中
- javascript - 如何在 IOS PWA 上刷新页面
- java - Map 值在遍历 Map 时被覆盖
- ios - 命令 PhaseScriptExecution 以非零退出代码 iOS 失败