我需要能够读取多个参数的文件的每一行,因此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());
}
}
答案 0 :(得分:1)
我需要能够阅读文件的每一行
什么文件?您正在阅读System.in:
BufferedReader InputReader = new BufferedReader(new InputStreamReader(System.in));
您的代码将在此行阻止,直到您在控制台输入内容为止。
答案 1 :(得分:1)
您似乎有两个要比较的来源System.in
和args
我建议您单独阅读这些来源然后进行比较。
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命令就不会返回任何内容。
试
甚至更好,只读一次Stream并缓存结果!这更快更安全,因为Stream输入可以在迭代期间改变。
答案 3 :(得分:0)
您的代码永远不会从while循环中退出。
while ((nameFromFile = InputReader.readLine()) != null)
在上面的循环中,它只打印一次,在文件的末尾它不会超出while循环。这就是为什么你只得到一次输出。由于它不会从while循环退出,因此它不会返回for循环。 readLine()返回字符串,它以“\ n”或“\ r \ n”结尾。如下更改,您将能够读作ags.length
while ((nameFromFile = InputReader.readLine())=="\n")