我有一个 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/