Try-Catch-Finally -最后块不识别变量



首先,我知道我应该使用尝试捕获资源,但是我的系统上目前没有最新的JDK。

我有下面的代码,我试图确保使用finally块关闭资源阅读器,但是下面的代码由于两个原因不能编译。首先,reader可能还没有初始化,其次,close()应该在它自己的try-catch中被捕获。这两个原因不都挫败了最初的try-catch块的目标吗?

我可以通过将finally块close()语句放入自己的try-catch中来解决这个问题。然而,这仍然留下关于阅读器未初始化的编译错误?

我猜我哪里出了问题?感谢帮助!

欢呼,

public Path [] getPaths()
    {
        // Create and initialise ArrayList for paths to be stored in when read 
        // from file.
        ArrayList<Path> pathList = new ArrayList();
        BufferedReader reader;
        try
        {
            // Create new buffered read to read lines from file
            reader = Files.newBufferedReader(importPathFile);
            String line = null;
            int i = 0;
            // for each line from the file, add to the array list
            while((line = reader.readLine()) != null)
            {
                pathList.add(0, Paths.get(line));
                i++;
            }
        }
        catch(IOException e)
        {
            System.out.println("exception: " + e.getMessage());
        }
        finally
        {
            reader.close();
        }

        // Move contents from ArrayList into Path [] and return function.
        Path pathArray [] = new Path[(pathList.size())];
        for(int i = 0; i < pathList.size(); i++)
        {
            pathArray[i] = Paths.get(pathList.get(i).toString());
        }
        return pathArray;
    }

没有其他方法可以初始化缓冲区并捕获异常。编译器总是正确的。

BufferedReader reader = null;
try {
    // do stuff
} catch(IOException e) {
    // handle 
} finally {
    if(reader != null) {
        try {
            reader.close();
        } catch(IOException e1) {
            // handle or forget about it
        }
    }
}

方法close将总是需要一个try-catch块,因为它声明它可以抛出IOException。无论调用是在finally块中还是在其他地方都无关紧要。只是需要处理一下。

Read也必须用null初始化。恕我直言,这是超级无用的,但这就是Java。

相反,检查reader是否为空,然后相应地关闭它,如下所示(您应该在reader上调用close(),如果它不是空的,或者如果它已经实例化了,否则您将最终获得null reference异常)。

   finally
    {
        if(reader != null)
        {  
          reader.close();
        }
    }

相关内容

  • 没有找到相关文章

最新更新