Обработка исключений ошибок ввода-вывода: недостижимый блок catch для IOException. Это исключение никогда не выбрасывается из тела оператора try.

В настоящее время я работаю над заданием (Java) для школы. В инструкциях/рубрике мне сказали, что мне нужно использовать обработку исключений ввода-вывода для аргументов командной строки и других вещей.

**Что нужно сделать программе: **

Примите два аргумента командной строки при запуске, иначе выдайте ошибку. Рубрика включает следующее требование: «Обработка ошибок ввода-вывода выполняется, если нет аргументов команды».

Проблема в том, что каждый раз, когда я пытаюсь использовать перехват исключения ввода-вывода, я получаю эту ошибку:

"Недоступный блок catch для IOException. Это исключение никогда не выбрасывается из тела инструкции 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. Является ли это требование невозможным/запрашивает неправильное использование обработки исключений ошибок ввода-вывода?

Любая помощь приветствуется. Спасибо, Салли.


person Sully Brooks    schedule 05.01.2014    source источник
comment
Являются ли аргументы именами файлов вашей программы?   -  person Gaurav Varma    schedule 05.01.2014
comment
Да, потому что я буду читать текстовые файлы и писать текстовые файлы. Итак, с моим обновленным кодом (используется ArrayIndexOutOfBoundsException) он отлично работает с использованием аргументов, ciphers.txt, plain.txt и работает нормально. :)   -  person Sully Brooks    schedule 05.01.2014
comment
да .. Я чувствую, что ваш учитель имел в виду, что вам нужно будет обрабатывать IOException при чтении/записи файлов - ciphers.txt plain.txt   -  person Gaurav Varma    schedule 05.01.2014
comment
Я тоже прихожу к такому выводу, основываясь на этих ответах. Просто хотел убедиться, что я не ставлю под угрозу возможные баллы за свое задание: P   -  person Sully Brooks    schedule 05.01.2014


Ответы (2)


Я думаю, проблема в том, что Java никогда не вызовет IOException в коде.

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

поэтому нет необходимости перехватывать IOException. Исключение, которое вы можете перехватить, может быть ArrayIndexOutOfBoundsException, если пользователь не предоставил 2 аргумента.

Исключение IOException иногда возникает, когда вы взаимодействуете с внешними источниками, например, через Socket, или читаете из файла, и некоторые чтения ввода идут неправильно. Но определение того, что находится в массиве args, не вызывает исключение IOException.

Я не совсем понимаю, почему ваш учитель указал исключение ввода-вывода. Он имеет в виду ввод-вывод вообще или Java IOException?

person user2570465    schedule 05.01.2014
comment
Ну, в рубрике написано: обработка ошибок ввода-вывода выполняется, если нет аргументов команды. Очень может быть, что мне даже не нужно создавать фактическое исключение IOException. У него также есть еще одно требование: обработка ошибок ввода-вывода выполняется, если файлы не могут быть открыты. Думаю, со мной все будет в порядке, если я просто выброшу исключение ArrayIndexOutOfBoundsException. Большое спасибо, принимаю ответы, как только мне будет позволено. - person Sully Brooks; 05.01.2014

причина, по которой он говорит это, заключается в том, что внутри блока try не происходит никакой операции, которая может вызвать IOException. другими словами, вы не можете получить IOException из того, что находится внутри вашего блока try. Вы можете попробовать поймать ArrayIndexOutOfBoundsException, так как это потенциально может произойти, и в этом случае также удалите if (args.length > 0), поскольку он больше не нужен, поскольку вы будете ловить эту ошибку и обрабатывать ее. Надеюсь это поможет.

person doomsdaymachine    schedule 05.01.2014
comment
Благодаря тонну. Примерно так же, как ответ выше. Весь вклад приветствуется :) P.S. Спасибо за качественную деталь - person Sully Brooks; 05.01.2014
comment
ха-ха, да, к тому времени, когда я написал, они уже были там, лол. нет проблем, спасибо! :) - person doomsdaymachine; 05.01.2014