[英]bufferedReader readline=null
我试图编写一个将接收文本文件,反转其内容并将其写回的类。 我要执行的方法是在String[]
数组中写入行,反转行,然后将文本写回到文本文件。 问题是,当我开始写入String数组时,它只注销空值,并且我知道文本文件不为空。 我正在使用BufferedReader
的副本来读取行。 我似乎无法理解我在哪里错。 当我像代码中那样向下初始化String
数组textFile时,反转没有问题,但是当我使用
String[] textFile = new String[getNumberOfLines ()];
方法,它不起作用。
public void reverse() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(WORK_FOLDER_LOCATION + FILE_NAME));
String[] textFile = new String[3];
try {
for (int i = 0; i < textFile.length; i++) {
textFile[i] = reader.readLine();
textFile[i] = reverseLine(textFile[i]);
}
} catch (IOException e) {
throw new IOException("There was a problem while operating with the reader.");
} finally {
reader.close();
}
writeReverseText(textFile);
}
private int getNumberOfLines(BufferedReader reader) throws IOException {
BufferedReader linesReader = reader;
int counter = 0;
try {
while (linesReader.readLine() != null) {
counter++;
}
linesReader.close();
} catch (IOException e) {
throw new IOException("There was a problem while counting the lines");
}
return counter;
}
private String reverseLine(String string) {
StringBuilder reversedString = new StringBuilder(string).reverse();
System.out.println(reversedString);
return reversedString.toString();
}
private void writeReverseText(String[] textFile) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(WORK_FOLDER_LOCATION + FILE_NAME));
for (int i = 0; i < textFile.length; i++) {
writer.append(textFile[i]);
writer.append(System.lineSeparator());
}
writer.close();
}
编辑我设法解决了这个问题,但是更改了getNumberOfLines()
方法:
private int getNumberOfLines() throws IOException {
BufferedReader linesReader = new BufferedReader(new FileReader(WORK_FOLDER_LOCATION + FILE_NAME));
希望这对其他人有所帮助,我很想知道为什么以前的代码不起作用。
您的getNumberOfLines()
方法将从BufferedReader
读取所有数据-因此,除非您再次开始读取文件,否则将无法读取任何内容,并且对readLine()
首次调用将返回null
。
但是,与其这样做,不如最好只读取一次文件并填充List<String>
。 例如:
List<String> lines = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
lines.add(reverseLine(line));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.