在while块中初始化?

时间:2014-10-15 13:29:46

标签: java

是否有更简洁的方法来执行以下操作(无需在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();
    }
}

4 个答案:

答案 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);
}

但这确实是一种风格问题。

相关问题