![](/img/trans.png)
[英]Java bufferedreader sometimes skips first character while reading lines
[英]BufferedReader skips lines not starting with '#'
我有以下构造:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(CFG_FILE)));
String line;
while ((line = bufferedReader.readLine()) != null) {
if (line.matches(PATTERN)) {
//do something
}}
我正在阅读的文件如下所示:
test1,\
test2,\
test3,\
#test4,\
#test5,\
test6,\
#test7,\
test8
我在以if
开头的行中有一个断点,但是在调试时单步执行时,我注意到line
never 是不以#
开头的行之一。 这是为什么?
编辑:这里有一些更多的背景:
private static final String BASIT_PATTERN = "^\\s+basit-.+";
ArrayList<String> featuresConfigEntries = new ArrayList<>();
try {
BufferedReader featuresConfigBufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(FEATURES_CFG)));
String necessaryComponentsFileLine;
while ((necessaryComponentsFileLine = featuresConfigBufferedReader.readLine()) != null) {
if (necessaryComponentsFileLine.matches(BASIT_PATTERN)) {
final String[] splitNecessaryComponentsFileLine = necessaryComponentsFileLine.split(",");
for (String necessaryComponentString : splitNecessaryComponentsFileLine) {
if (necessaryComponentString.matches(BASIT_PATTERN)) {
featuresConfigEntries.add(necessaryComponentString.replaceAll("\\s+", "").trim());
}
}
}
}
} catch (FileNotFoundException e) {
LOGGER.error("File not found: " + FEATURES_CFG, e);
} catch (IOException e) {
LOGGER.error("Failed reading file: " + FEATURES_CFG, e);
}
文件中的相关行:
featuresBoot=config,ssh,management,kar,\
basit-core-domain,\
#basit-datasource-ecom,\
basit-connector-ecom,\
basit-datasource-talendmd,\
basit-connector-talendmd,\
basit-datasource-hybris,\
basit-connector-hybris,\
basit-connector-sap,\
basit-connector-jms,\
#basit-order-service,\
#basit-article-service,\
#basit-checkout-service,\
#basit-checkout-service,\
#basit-cart-service,\
basit-server-availability,\
#basit-address-service,\
#basit-user-service,\
basit-connector-atp-engine
它具有经过十多年测试的非常具体的确定性行为。
您的输入文件不包含您认为的内容。
如果您在阅读行时它是“跳过”行,则这些行没有适当的EOL
标记并且正在与下一行或上一行连接。
在读取行后立即放置一个断点是您应该尝试的第一件事。
可怕的调试日志也会告诉你同样的事情。
while ((necessaryComponentsFileLine = featuresConfigBufferedReader.readLine()) != null) {
// have you even tried to System.out.println(necessaryComponentsFileLine); ?
}
您的模式不正确,它不会匹配任何不是以至少1 or more whitespace characters
开头的内容。
^ 在行首断言位置
\\s+ 匹配任何空白字符 [\\r\\n\\t\\f ] 量词:+ 一次和无限次之间,尽可能多次,根据需要回馈 [贪婪]
basit- 匹配字符 basit- 字面意思(区分大小写)
.+ 匹配任何字符(换行符除外) 量词:+ 一次和无限次之间,尽可能多次,根据需要回馈 [贪婪]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.