ReadLine - 执行两次?

时间:2014-01-16 10:21:49

标签: java while-loop bufferedreader

我需要能够读取多个参数的文件的每一行,因此for循环。在第一个之后,它似乎不再读它们了,似乎跳过了try语句。有任何想法吗?我确定它是一件令人愚蠢的事情,但我一直在玩它,但不幸的是,时间不在我的身边。

for (int j = 0; j < ags.length; j++){

 try{
String nameFromFile = null;
BufferedReader InputReader = new BufferedReader(new InputStreamReader(System.in));
while ((nameFromFile = InputReader.readLine()) != null) {

    // Do stuff

} catch (IOException e) {
     System.out.println(e.getMessage());
    }
}

4 个答案:

答案 0 :(得分:1)

  

我需要能够阅读文件的每一行

什么文件?您正在阅读System.in:

BufferedReader InputReader = new BufferedReader(new InputStreamReader(System.in));

您的代码将在此行阻止,直到您在控制台输入内容为止。

答案 1 :(得分:1)

您似乎有两个要比较的来源System.inargs我建议您单独阅读这些来源然后进行比较。

Set<String> fromInt = new HashSet<>();
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
    for(String line; (line = br.readLine()) != null;)
        fromIn.add(normalise(line));
}
// compare argsList with fromIn. 

e.g。

for(String arg: args) {
    if (fromIn.contains(normalise(arg))) {
       // something
    } else {
       // something else
    }
}

答案 2 :(得分:0)

您没有读取文件,请使用System.in流。

每个流都有一个内部指针,所以流为nows,最后读取了哪一行。

如果系统流被读取一次,则指针指向流的末尾。 只要未重置流,read命令就不会返回任何内容。

InputStream.reset()

甚至更好,只读一次Stream并缓存结果!这更快更安全,因为Stream输入可以在迭代期间改变。

答案 3 :(得分:0)

您的代码永远不会从while循环中退出。

while ((nameFromFile = InputReader.readLine()) != null) 

在上面的循环中,它只打印一次,在文件的末尾它不会超出while循环。这就是为什么你只得到一次输出。由于它不会从while循环退出,因此它不会返回for循环。 readLine()返回字符串,它以“\ n”或“\ r \ n”结尾。如下更改,您将能够读作ags.length

while ((nameFromFile = InputReader.readLine())=="\n")