BufferedReader不会读取整个文本文件



我读到有人在使用BufferedReader时遇到问题:阅读器根本不读第一行。相反,我有相反的问题。例如,在一个有300行的文本文件中,它到达200行,读取一半,然后下面的字符串为null,因此它停止。

private void readerMethod(File fileList) throws IOException {
BigInteger steps = BigInteger.ZERO;
BufferedReader br = new BufferedReader(new FileReader(fileList)); 
String st;
//reading file line by line
try{
while (true){
st = br.readLine();
if(st == null){
System.out.println("Null string at line " + steps);
break;
}
System.out.println(steps + " - " + st);
steps = steps.add(BigInteger.ONE);
}
}catch(Exception e){
e.printStackTrace();
}
finally{
try{
br.close();
}catch(Exception e){}
}
}

前一段代码的输出与预期一样,直到它到达第199行(从0开始(。考虑一个有300行的文件。

... 198 - 3B02D5D572B66A82F9D21EE809320DB3E250C6C9 199 - 6E2C69795CB712C27C4097119CE2C5765 Null string at line 200

请注意,所有的行都有相同的长度,因此在这个输出行199甚至不完整。我检查了文件文本,它是正确的:它包含全部300行,并且它们的长度都相同。此外,正如你所看到的,文本中只有大写字母和数字。

我的问题是:我该如何解决这个问题?我需要BufferedReader读取所有文本,而不仅仅是其中的一部分。

正如有人要求我在这里添加代码的剩余部分。请注意,所有大写名称都是各种类型的常量(int、string等(。这是主线程调用的方法:

public void init(){
BufferedWriter bw = null;
List<String> allLines = createRandomStringLines(LINES);
try{
String fileName = "SHA1_encode_text.txt";
File logFile = new File(fileName);
System.out.println(logFile.getCanonicalPath());
bw = new BufferedWriter(new FileWriter(logFile));
for(int i = 0; i < allLines.size(); i++){
//write file
String o = sha1FromString(allLines.get(i));
//sha1FromString is a method that change the aspect of the string,
//replacing char by char. Is not important at the moment.
bw.write(o + "n");
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
bw.close();
}catch(Exception e){}
}
}

创建随机字符串列表的方法如下。"SYMBOLS"只是一个包含所有可用字符的字符串。

private List<String> createRandomStringLines(int i) {
List<String> list = new ArrayList<String>();
while(i!=0){
StringBuilder builder = new StringBuilder();
int count = 64;
while (count-- != 0) {
int character = (int)(Math.random()*SYMBOLS.length());
builder.append(SYMBOLS.charAt(character));
}
String generatedString = builder.toString();
list.add(generatedString);
i--;
}
return list;
}

请注意,所写的文件是完全正确的。

好吧,多亏了用户ygor,我设法解决了这个问题。问题是BufferReader在BufferWriter还没有关闭的时候就开始了他的工作。在bufferWriter.close()命令之后,移动需要读取器工作的命令行就足够了。

相关内容

  • 没有找到相关文章

最新更新