文件阅读最后一行

时间:2015-04-26 12:25:00

标签: java vector io

我在Java中使用此代码从文件中读取并将值传递给向量,但似乎不考虑最后一行。

int lines = 0;
Vector<String> vc = new Vector<String>();
BufferedReader in = new BufferedReader(new FileReader(FILE_NAME));      
while(in.readLine() != null){
    if(lines >= 1){
        vc.addElement(in.readLine());       
    }

    lines++;
}

System.out.println(vc.size());

for(int i = 0; i< vc.size(); i++){          
    System.out.println(vc.get(i));
}

文件的元素是

4
fdgdfs
sdfg
sdfg
sfdg
sdfg

例如,我想从第二行读取并将它们添加到向量中。结果打印

3
sdfg
sfdg
null

什么似乎是问题?

2 个答案:

答案 0 :(得分:2)

变化:

while(in.readLine()!=null)

为:

 while((line = in.readLine())!=null)

其中line是一个String,你应该在while循环之前定义。

然后使用line变量按如下方式添加元素

vc.addElement(line);

正如评论中所建议的那样,您可以使用arraylist而不是vector, read this它解释了为什么你应该这样做。

答案 1 :(得分:0)

使用此代码:

package stackoverflow;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

public class FileReadingLastLine {

    private static final String FILE_NAME = "test";

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        try {
            BufferedReader in = new BufferedReader(new FileReader(FILE_NAME));
            String line = "";
            int lines = 0;
            while ((line = in.readLine()) != null) {
                if (lines >= 1) {
                    list.add(line);
                }
                lines++;
            }

            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Size: " + list.size() + "\n");

        for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
            String string = (String) iterator.next();
            System.out.println(string);
        }
    }
}

输出结果为:

Size: 5

fdgdfs
sdfg
sdfg
sfdg
sdfg

名为test的文件的内容为:

4
fdgdfs
sdfg
sdfg
sfdg
sdfg