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

时间:2017-03-12 18:58:03

标签: java arrays buffer printwriter reader

我正在尝试创建一个程序,该程序接受输入的文本文件并逐个读取行。然后它需要在数组中存储最近读取的行(行数取决于参数行),然后我需要使用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();
        }
    }

编辑

完整的问题是:

创建一个程序,从IN读取行,一行直到结束。您的方法必须维护一个内部缓冲区,用于存储最近读取的行(这可能最好使用数组完成)。一旦方法到达文件的末尾,它应该将存储在内部缓冲区中的行打印出来,最好通过创建一个PrintWriter来装饰这个Writer。 (除了在开发阶段进行调试之外,此方法不应向System.out打印任何内容。)

2 个答案:

答案 0 :(得分:0)

试试这个:

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;
         } 
    }

答案 1 :(得分:0)

听起来像是数据结构的任务。队列似乎是最适合给定任务的。

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));
}