Java:如何读取文本文件的每一行并将每一行设置为数组元素?

时间:2012-11-05 07:14:38

标签: java arrays file bufferedreader filereader

我正在尝试阅读文本文件的每一行中列出的问题,然后将每行添加到数组中,以便稍后可以单独调用它们。我几乎肯定可以用Java做,但我不确定如何做到这一点。

我确实弄明白了如何读取整个文本文件并将其全部设置为字符串:

    private static String readFile(String pathname) {
    String line = null;
    try {
        BufferedReader reader = new BufferedReader(new FileReader(pathname));
        while((line = reader.readLine()) != null){
            System.out.println(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return line;
}

虽然它与此没什么关系,但正如我所提到的,这是一个存在问题的文件。如果我得到这个问题的解决方案,我将会有另一个文件来解答问题的所有答案,然后我会为该文件做同样的事情。

有没有人知道这样做的方法并不太复杂?如果它必须复杂,那么告诉我。我想要某种类型的示例,而不仅仅是指向不同站点的链接。我不是说我只会这样做。

感谢您的时间!

P.S。我已经阅读了关于这个主题的其他问题,但找不到合适的答案和/或我想用Java做的例子。

6 个答案:

答案 0 :(得分:5)

我会使用ArrayList ......就像这样......

ArrayList<String> questions = new ArrayList<String>();


/// in your loop...
while((line = reader.readLine()) != null){
  questions.add(line);
}

顺便说一下,正如jlordo在评论中指出的那样,你构建方法的方式,你的循环的唯一出路是将行变为null,所以,当你到达return语句时'返回null。你究竟想要回到这里的是什么?如果它是整个行文件,则需要将它们添加到String中。

答案 1 :(得分:2)

而不是数组使用ArrayList,这是动态的,并找到具体的代码。

private static List<String> readFile(String pathname) {
    String line = null;
    List<String> list = new ArrayList<String>();
    try {
        BufferedReader reader = new BufferedReader(new FileReader(pathname));
        while((line = reader.readLine()) != null){
            list.add(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

对于第二个文件,您应该保持map<question,answer>表示Map<String,String>

答案 2 :(得分:1)

 private static String readFile(String pathname) {
    List<String> lines = new ArrayList<String> ();
    String line = null;
    try {
        BufferedReader reader = new BufferedReader(new FileReader(pathname));
        while((line = reader.readLine()) != null){
            lines.add(line) ;
            System.out.println(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

像我一样使用ArrayList<String>,它会动态增长。 将它声明为一个字段,我在这个例子中只使用了一个局部变量。 你可以像以后一样迭代它:

 for(String line : lines)
   {
      System.out.println(line) ;
    }

答案 3 :(得分:1)

你不能只是创建一个字符串arraylist并使用readLine()添加读取的每一行吗?然后你可以将arraylist转换成普通数组。

listArray.toArray(strArray);

答案 4 :(得分:1)

使用番石榴Files

一行代码:

System.out.println(Files.readLines(new File("C:\\sample.txt"), Charsets.UTF_8));

答案 5 :(得分:0)

这在java 8中非常简洁:

List<String> fileLines = Files.lines(Paths.get("/file/path/")).collect(Collectors.toList());