2

我正在尝试阅读文本文件每一行中列出的问题,然后将每一行添加到一个数组中,以便以后可以单独调用它们。我几乎肯定可以用 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;
}

尽管与此没有太大关系,但正如我所提到的,这是一个包含问题的文件。如果我得到了这个问题的解决方案,我将为所有问题的答案创建另一个文件,然后我将对那个文件做同样的事情。

有谁知道一种不太复杂的方法来做到这一点?如果它必须是复杂的然后告诉我。我想要某种类型的示例,而不仅仅是指向不同站点的链接。我不是说我只会接受那个。

感谢您的时间!

PS 我已经阅读了关于这个主题的其他问题,但找不到合适的答案和/或我在 Java 中尝试做的例子。

4

6 回答 6

5

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

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


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

顺便说一句,正如 jlordo 在评论中指出的那样,你构建方法的方式,唯一的出路是让 line 为空,所以,当你到达你的 return 语句时,你正在返回空值。你到底想回到这里做什么?如果它是整个行文件,您需要随时将它们添加到字符串中。

于 2012-11-05T07:17:44.880 回答
2

而不是 array use 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>手段 a Map<String,String>

于 2012-11-05T07:17:11.703 回答
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) ;
    }
于 2012-11-05T07:17:08.533 回答
1

您不能只创建一个字符串数组列表并将使用 readLine() 读取的每一行添加到其中吗?然后,您可以将 arraylist 转换为普通数组。

listArray.toArray(strArray);
于 2012-11-05T07:19:18.907 回答
1

使用番石榴文件

一行代码:

System.out.println(Files.readLines(new File("C:\\sample.txt"), Charsets.UTF_8));
于 2012-11-05T08:25:11.023 回答
1

这在 java 8 中非常简单明了:

List<String> fileLines = Files.lines(Paths.get("/file/path/")).collect(Collectors.toList());
于 2018-01-28T18:44:27.567 回答