java - 我的 bufferedReader 读取整个文件,而不仅仅是一行。为什么?

标签 java byte bufferedreader

我有一个 bufferedReader ,它应该读取文本文件的一行(已编码),对其进行解码,并检查它是否包含一组特定的数字。它检查是否包含一组特定数字的部分很好,但是,我有一个问题,它读取整个文件,下面是我的代码,以及从文件读取的内容的输出以及应该如何读取它,如下所示:

代码:

prviate static final String UTF8_BOM = "\uFEFF";
String cardNumberStr = "106382076";
String lineFromFile = null;
lineFromFile = bufferedReaderToWrite.readLine();
if (lineFromFile.startsWith(UTF8_BOM)) {
    lineFromFile = lineFromFile.substring(1);
}
lineFromFile = lineFromFile.substring(1, lineFromFile.length()-1);  //Convert bytes read back to String
for(String s: lineFromFile.split(", ")){    //Split every byte on ,
    sb.append((char) Integer.parseInt(s));  //Convert byte to char
}
String textToCheck = sb.toString(); //Convert StringBuilder to String
System.out.println(textToCheck);
System.out.println();
System.out.println(cardNumberStr);
if(textToCheck.contains(cardNumberStr)){
    System.out.println(lineFromFile);
}

从文件中读取的内容的输出:

106382076
78, 97, 109, 101, 32, 116, 101, 115, 116, 32, 99, 97, 114, 100, 78, 111, 32, 52,
48, 52, 54, 48, 52, 57, 51, 57, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 9
7, 108, 97, 110, 99, 101, 32, 51, 49, 48, 32, 111, 118, 101, 114, 100, 114, 97,
102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102,
116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 50, 50, 50
Name test cardNo 404604939 Current Balance 310 overdraft false overDraftLimit 0
pin 2222Name account cardNo 106382076 Current Balance 132 overdraft false overDr
aftLimit 0 pin 4444Name test cardNo 404604939 Current Balance 310 overdraft fals
e overDraftLimit 0 pin 2222Name account cardNo 106382076 Current Balance 132 ove
rdraft false overDraftLimit 0 pin 4444`

它应该输出:

Name test cardNo 404604939 Current Balance 310 overdraft false overDraftLimit 0
pin 2222

Name account cardNo 106382076 Current Balance 132 overdraft false overDr
aftLimit 0 pin 4444

文本文件内容如下:

[78, 97, 109, 101, 32, 116, 101, 115, 116, 32, 99, 97, 114, 100, 78, 111, 32, 49, 56, 57, 52, 57, 51, 50, 56, 52, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 97, 108, 97, 110, 99, 101, 32, 57, 52, 32, 111, 118, 101, 114, 100, 114, 97, 102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102, 116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 51, 50, 51]
[78, 97, 109, 101, 32, 116, 101, 100, 116, 32, 99, 97, 114, 100, 78, 111, 32, 55, 48, 49, 55, 50, 53, 50, 51, 49, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 97, 108, 97, 110, 99, 101, 32, 50, 54, 48, 32, 111, 118, 101, 114, 100, 114, 97, 102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102, 116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 50, 50, 50]`

最佳答案

我认为这里的问题是,当您写入文件时,您忘记包含换行符...

(另外,BOM 有什么用处?)

当你写入它并使用BufferedWriter时,不要忘记在写入一行后writer.newLine()

请注意,您可以使用 Files.write()直接将一组行写入文件,这将为您插入换行符。最后,您可以使用Files.readAllLines()一次读取一行中的所有文件。

使用 Java 8,您还可以使用 Files.lines()

关于java - 我的 bufferedReader 读取整个文件,而不仅仅是一行。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27620071/

相关文章:

java - Powermock 或 EasyMock junits

java - 如何保持图像比例并根据实际大小调整图像大小?

java - 如何捕获从 URL 重定向器生成的 session key

c# - 将 short[] 转换为可以作为音频播放的 Stream

c++ - 将 System::Byte 的交错数组转换为无符号字符**

java - 有没有一种简单的方法可以在文件输入期间保留java中的尾随制表符?

Java解析csv并创建对象

java - 如何从 Exchange 获取内容。In :Body object from a ProcessDefinition in Camel

java - 从 inputStream 中读取字节的 Int 值

java - 从 BufferedReader (readLine) 读取返回 null?