您好我在java中尝试使用BufferedReader读取文件时手动比较内容,我发现有数据丢失,我使用以下代码
private static String readFile(String filePath) {
BufferedReader br = null;
FileReader fr = null;
try {
InputStream inputStream = new FileInputStream(filePath);
br = new BufferedReader(new InputStreamReader(inputStream));
String data = "";
while ((br.readLine()) != null) {
data = data + br.readLine();
}
return data;
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
if (fr != null)
fr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return "Error : could not read the value";
}
我输入的文件内容是: - 快乐的混蛋的快速电影评论 该死的那个y2k bug。 这部电影由杰米·李·柯蒂斯和另一位鲍德温兄弟(威廉此次)主演的故事有一个良好的开端,讲述的是一艘拖船的船员遇到一艘废弃的俄罗斯科技船,当他们踢回来时,它有一种奇怪的感觉上 。 他们很少知道内在的力量。 。 。 为了血腥,并在这里和那里带来一些动作序列,病毒仍然感觉非常空虚,就像一部电影适合所有闪光而没有实质内容。 我们不知道为什么机组人员真的在不知名的地方,我们不知道接管船只的原因(只是一个粉红色的华丽的东西击中了镜子),当然,我们不知道不知道为什么唐纳德·萨瑟兰在整个醉酒中磕磕绊绊。 在这里,它只是“嘿,让我们用一些机器人追逐这些人”。 表演低于平均水平,即使是像柯蒂斯这样的人。 在万圣节h20,你更有可能获得她的工作。 萨瑟兰浪费了,鲍德温,当然,他的表现就像一个鲍德温。 这里真正的明星是斯坦温斯顿的机器人设计,一些schnazzy cgi,以及偶尔好的血腥射击,就像挑选某人的大脑一样。 所以,如果机器人和身体部位真的让你开启,这就是你的电影。 否则,它几乎是一部沉没的电影船。
输出为: -
该死的那个y2k bug。他们很少知道内在的力量。 。 。我们不知道为什么机组人员真的在不知名的地方,我们不知道接管船只的原因(只是一个粉红色的华丽的东西击中了镜子),当然,我们不知道不知道为什么唐纳德·萨瑟兰在整个醉酒中磕磕绊绊。表演低于平均水平,即使是像柯蒂斯这样的人。萨瑟兰浪费了,鲍德温,当然,他的表现就像一个鲍德温。所以,如果机器人和身体部位真的让你开启,这就是你的电影。空答案 0 :(得分:1)
以下代码存在问题。请注意,您正在读取两次行,但只使用其中一行。跳过每个备用行。
while ((br.readLine()) != null) {
data = data + br.readLine();
}
正确的代码是。
String line = null;
while ((line = br.readLine()) != null) {
data = data + line;
}