Java 如何从输入的文件中读取行,然后将最近读取的行存储在数组中?
我正在尝试创建一个程序,它接收输入的文本文件并逐行读取。然后它需要将最近读取的行(行数取决于参数行)存储在数组中,然后我需要使用PrintWriter打印这些行 我开始了第一部分,但我不确定我的想法是否正确。如果有人能在第二部分帮助我,那将非常感谢Java 如何从输入的文件中读取行,然后将最近读取的行存储在数组中?,java,arrays,buffer,printwriter,reader,Java,Arrays,Buffer,Printwriter,Reader,我正在尝试创建一个程序,它接收输入的文本文件并逐行读取。然后它需要将最近读取的行(行数取决于参数行)存储在数组中,然后我需要使用PrintWriter打印这些行 我开始了第一部分,但我不确定我的想法是否正确。如果有人能在第二部分帮助我,那将非常感谢 public void RecentLines(Reader in, Writer out, int lines) throws IOException { BufferedReader r3ader = new BufferedReader(i
public void RecentLines(Reader in, Writer out, int lines) throws IOException {
BufferedReader r3ader = new BufferedReader(in);
String str;
while((str = r3ader.readLine()) != null){
String[] arr = str.split(" ");
for( int i =0; i < lines; i++){
arr[i] = r3ader.readLine();
}
}
public void recentline(读取器输入、写入器输出、int行)引发IOException{
BufferedReader r3ader=新的BufferedReader(in);
字符串str;
而((str=r3ader.readLine())!=null){
字符串[]arr=str.split(“”);
对于(int i=0;i
编辑
全部问题是:
创建一个从中读取行的程序,每次读取一行直到结束。您的方法必须维护一个内部缓冲区,该缓冲区存储最近读取的行(最好使用数组)。一旦该方法到达文件末尾,它应该将存储在内部缓冲区中的行打印到输出中,最好是创建一个PrintWriter来装饰该写入程序。(除了开发阶段的调试目的外,此方法不应该将任何内容打印到System.out。)尝试以下方法:
public void RecentLines(Reader in, Writer out, int lines) throws IOException {
BufferedReader r3ader = new BufferedReader(in);
String str;
int i=0;
String[] lineArray = new String[lines];
while((str = r3ader.readLine()) != null){
lines[i%lines] = str;
i++;
if(!r3ader.hasNextLine()){
break;
}
}
听起来像是数据结构的任务。队列似乎最适合给定的任务
public void RecentLines(Reader in, Writer out, int lines) throws IOException {
BufferedReader r3ader = new BufferedReader(in);
BufferedWriter wout = new BufferedWriter(out);
String str;
Queue<String> content = new LinkedList<String>();
int i = 0;
while ((str = r3ader.readLine()) != null) {
if (i >= lines) {
content.remove();
}
content.add(str);
i++;
}
wout.write(String.valueOf(content));
}
public void recentline(读取器输入、写入器输出、int行)引发IOException{
BufferedReader r3ader=新的BufferedReader(in);
BufferedWriter wout=新的BufferedWriter(输出);
字符串str;
队列内容=新建LinkedList();
int i=0;
而((str=r3ader.readLine())!=null){
如果(i>=行){
content.remove();
}
添加(str);
i++;
}
wout.write(String.valueOf(content));
}
为什么在while循环中使用for循环?只需使用一个循环在输入文件上迭代r3ader.hasnetline()
不是必需的,因为当到达文件末尾时,r3ader.readLine()
将返回null
。