java - 尽管捕获了 IOException 还是编译器错误

标签 java exception

以下文件 I/O 程序取自标准 Oracle 文档:

//Copy xanadu.txt byte by byte into another file
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes
{
    public static void main(String[] args) //throws IOException
    {
        FileInputStream in = null;
        FileOutputStream out = null;

        try
        {
            in = new FileInputStream("xanadu.txt");
            out = new FileOutputStream("xanadu_copy.txt");
            int c;

            while((c = in.read()) != -1)
            {
                out.write(c);
            }
        } 
        catch (IOException e)
        {
            System.out.println("IO exception : " + e.getMessage());
        }
        finally
        {
            if (in != null)
            {
                in.close();
            }
            if (out != null)
            {
                out.close();
            }
        }
    }
}
正如你所看到的,我注释掉了 throws IOException 部分,认为既然我在代码中捕获了它,一切都应该没问题。但我收到编译器错误:

CopyBytes.java:32: error: unreported exception IOException; must be caught or declared to be thrown
                in.close();
                        ^
CopyBytes.java:36: error: unreported exception IOException; must be caught or declared to be thrown
                out.close();
                         ^
2 errors

当我包含 throws IOException 部分时,错误消失了,但我很困惑。我捕获异常还不够吗?

最佳答案

您没有捕获可能在finally block 中抛出的潜在IOException。

您可以通过在finally block 中添加try-catch来修复它:

    finally
    {
      try {
        if (in != null)
        {
            in.close();
        }
        if (out != null)
        {
            out.close();
        }
      }
      catch (IOException ex) {
      }
    }

关于java - 尽管捕获了 IOException 还是编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29984724/

相关文章:

java - 复制单链表

java - 为什么使用ArrayList但返回原始类型的方法要求该方法名称包含 “static”?

java - Wicket 链接重放攻击

Java:处理程序对于已检查的异常是必需的

c# - 如何捕捉远程服务器返回错误: NotFound?

java - 为什么我看不到 Android 应用程序的布局?

java - 输出错误: Binary Search Tree implementation using Java

java - 将mysql数据库的两列数据依次打印到jTextfield的最佳方法

java - 调用静态方法时是否需要调用单独的方法?

java - 我们可以在 finally block 中使用 "return"