使用 BufferedReader 读取 csv 文件的最后 n 行
Read in the last n lines of a csv file using a BufferedReader
我有一个程序使用 BufferedReader
读取 CSV 文件的第一行和最后一行,现在我需要将其转换为读取第一行和 最后 8 文件的行,因为格式已经改变。但我不确定如何表示最后 8 行。
我如何(可以)使用 BufferedReader
表示文件的最后 8 行
try(BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()))) {
if(reader != null){
String aux = "";
String lastLineMinusOne = "";
while ((aux = reader.readLine()) != null) {
String auxTrimmed = aux.replaceAll("(?m)^[ \t]*\r?\n", "");
if(count == 0)firstLine = auxTrimmed;
lastLineMinusOne = lastLine;
lastLine = auxTrimmed;
count ++;
}
logger.info("Count = " + count);
columns = firstLine.split(",");
data = lastLine.split(",");
只需使用 Deque
并在大小超过 8
时删除它们。
由于队列是 FIFO
那么如果使用 remove()
它只会保留最近的 8 个条目。
Deque<String> queue=new ArrayDeque<String>();
String line;
while ((aux = reader.readLine()) != null){
if(queue.size()>=8){
queue.remove();
}
queue.add(aux);
}
System.out.println(queue.size());//should print 8
我有一个程序使用 BufferedReader
读取 CSV 文件的第一行和最后一行,现在我需要将其转换为读取第一行和 最后 8 文件的行,因为格式已经改变。但我不确定如何表示最后 8 行。
我如何(可以)使用 BufferedReader
try(BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()))) {
if(reader != null){
String aux = "";
String lastLineMinusOne = "";
while ((aux = reader.readLine()) != null) {
String auxTrimmed = aux.replaceAll("(?m)^[ \t]*\r?\n", "");
if(count == 0)firstLine = auxTrimmed;
lastLineMinusOne = lastLine;
lastLine = auxTrimmed;
count ++;
}
logger.info("Count = " + count);
columns = firstLine.split(",");
data = lastLine.split(",");
只需使用 Deque
并在大小超过 8
时删除它们。
由于队列是 FIFO
那么如果使用 remove()
它只会保留最近的 8 个条目。
Deque<String> queue=new ArrayDeque<String>();
String line;
while ((aux = reader.readLine()) != null){
if(queue.size()>=8){
queue.remove();
}
queue.add(aux);
}
System.out.println(queue.size());//should print 8