Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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_Vector_Io - Fatal编程技术网

Java 文件读取最后一行

Java 文件读取最后一行,java,vector,io,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.addEl

我在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));
}
例如,我想从第二行读取,并将它们添加到向量中。打印结果如下所示

3
sdfg
sfdg
null
出现了什么问题?

更改:

while(in.readLine()!=null)
致:

其中,
line
是一个字符串,您应该在while循环之前定义它

然后使用以下行变量添加元素

vc.addElement(line);
正如注释中所建议的,您可以使用arraylist而不是vector, 它解释了为什么要这样做。

使用以下代码:

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);
        }
    }
}
名为
test
的文件的内容是:

4
fdgdfs
sdfg
sdfg
sfdg
sdfg

饮食规范可能对健康有害。除此之外,
行>=1
将跳过第一行,因为
已初始化为0。每次迭代都要调用.readLine()。叫它一次。另外,停止使用向量。它已经过时15年了。并考虑使用也…你真的需要一个
向量
而不是
数组列表
?不要使用
向量
。使用
ArrayList
@MadConan我不会说“不”,回想一下
Vector
s是同步的,有时您确实需要它们。
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
4
fdgdfs
sdfg
sdfg
sfdg
sdfg