java - I/O 错误异常处理 : Unreachable catch block for IOException. try 语句主体永远不会抛出此异常

标签 java command-line error-handling io arguments

我目前正在为学校做一项作业 (Java)。在说明/标题中,我被告知需要对命令行参数和其他内容使用 I/O 异常处理。

**程序需要做什么:**

运行时采用两个命令行参数,否则抛出错误。 该标题包括以下要求:“如果没有命令参数,则完成 I/O 错误处理”

问题是,每次我尝试使用 I/O 异常捕获时,我都会收到此错误:

“无法访问 IOException 的 catch block 。该异常永远不会从 try 语句主体中抛出”

我从 Eclipse 得到的快速修复建议:
1.删​​除Catch子句 2. 将 Catch 子句替换为 close

这是我的代码:

import java.awt.Robot;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;

public class DecipherText {
    public static void main(String[] args) throws IOException { 
        String firstArg;
        String secondArg;

        if (args.length > 0) {
            try {
                firstArg = args[0];
                secondArg = args[1];
            } catch (IOException e) {
                System.out.println("Usage Error: Not enough Arguments");
                System.out.println(e);
                return;
            }
        }

        String inputFile = args[0];
        String outputFile = args[1];
    }

    public static boolean receiver() { 
        return false;
    }

    public static boolean output() { // Outputs The Final File
        return false;
    }
}

我的问题是:

  1. 如果是这样,我做错了什么?
  2. 这个要求是否不可能/要求错误地使用 I/O 错误异常处理?

非常感谢任何帮助。 谢谢, 苏利

最佳答案

我认为问题是Java永远不会在代码中抛出IOException

firstArg = args[0];
secondArg = args[1];

因此,无需捕获 IOException。如果用户没有提供 2 个参数,您可能捕获的异常可能是 ArrayIndexOutOfBoundsException。

当您与外部源通信(例如通过套接字)或从文件读取并且某些输入读取出错时,有时会引发 IOException。但确定 args 数组中的内容不会引发 IOException。

我不太清楚为什么你的老师指定了 I/O 异常。他指的是一般的输入输出还是 Java IOException?

关于java - I/O 错误异常处理 : Unreachable catch block for IOException. try 语句主体永远不会抛出此异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20929621/

相关文章:

java - 类型为Printwriter的方法println(boolean)不适用于参数(void)

php - 确定 PHP 脚本的命令行与 http 执行的规范方法是什么?

node.js - 将 try/catch block 快速放入中间件以避免重复

error-handling - QTP,调用特定函数时出现未指定错误

php - Apache ErrorDocument 指令不重定向

java - 如何从使用jsp从数据库打印的表中删除特定用户行

java - Liquibase 是否在 Spring Boot 应用程序中注册所有 bean 之前运行?

java - 将目录和文件从 res/raw 文件夹复制到 SD 卡 - android

macos - 复制 Mac com.apple.ResourceFork 扩展属性导致 "Argument list too long"

c# - 定期检查 C# 中的命令行输出