是否有更简洁的方法来执行以下操作(无需在while块之前初始化行)?在使用变量之前初始化变量似乎没有必要,而不是像while那样((String line = br.readLine)!= null){}。如果没有,为什么不呢?
BufferedReader reader = null;
try
{
File file = new File("sample-file.dat");
reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
reader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
答案 0 :(得分:3)
不,你无法避免初始化变量。但是,您可以使用Try-With-Resources使其更清洁。
try (BufferedReader reader = new BufferedReader(new FileReader("sample-file.dat"))) {
String line;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
}
catch (IOException e)
{
e.printStackTrace();
}
答案 1 :(得分:2)
为了完成,只需添加此项,如果有人使用Java 8,您就可以访问Stream API。使用此功能,您只需执行以下操作即可:
BufferedReader reader = new BufferedReader(...);
reader.lines().forEach(System.out::println);
如果您想知道,产生此的引擎代码会检查null
行。
答案 2 :(得分:1)
否则您无法在while循环表达式评估步骤中声明(和使用)变量。但是,您可以使用try-with-resources
finally
块
try (
File file = new File("sample-file.dat");
BufferedReader reader = new BufferedReader(new FileReader(file));
) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
答案 3 :(得分:1)
不,除了for
循环之外,你不能在条件定义中声明一个变量。真的不能说出原因 - 也许是因为条件不应该是你初始化的东西,而for
初始化步骤是。
但无论如何,特别是在环路条件复杂的情况下,一些编码员更喜欢使用
while (true) {
String line = reader.readLine();
if ( line == null )
break;
System.out.println(line);
}
但这确实是一种风格问题。