Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从输入的文件中读取行,然后将最近读取的行存储在数组中?_Java_Arrays_Buffer_Printwriter_Reader - Fatal编程技术网

Java 如何从输入的文件中读取行,然后将最近读取的行存储在数组中?

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

我正在尝试创建一个程序,它接收输入的文本文件并逐行读取。然后它需要将最近读取的行(行数取决于参数行)存储在数组中,然后我需要使用PrintWriter打印这些行

我开始了第一部分,但我不确定我的想法是否正确。如果有人能在第二部分帮助我,那将非常感谢

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