2016-05-09 3 views
-2

Что бы вы сказали, это лучший способ отключить программу после того, как поймать исключение и позаботиться об этом в главной функции?Каков наилучший способ для завершения программы по ошибке?

  1. возвращение
  2. System.exit (...)
  3. вновь бросить исключение
  4. бросить пользовательских исключений в качестве оболочки
  5. исключение при выполнении
  6. что-то еще

    public static List<String> readFile(String file) 
         throws NoSuchFileException, EOFException, IOException { 
        Path p = Paths.get(file); 
        if (!Files.exists(p)) { 
         throw new NoSuchFileException(file); 
        } else if (!Files.isRegularFile(p)) { 
         throw new NoRegularFileException(file); 
        } else if (!Files.isReadable(p)) { 
         throw new AccessDeniedException(file); 
        } else if (Files.size(p) == 0) { 
         throw new EOFException(file); 
        } 
        return Files.readAllLines(p); 
    } 
    
    public static void main(String[] args) { 
        try { 
         if (args.length != 2) { 
          System.out.println("The proper use is: java MyProgram file1.txt file2.txt"); 
          return; 
         } 
    
         List<List<String>> files = new ArrayList<>(); 
         for (String s : args) { 
          try { 
           files.add(Utilities.readFile(s)); 
          } catch (NoSuchFileException e) { 
           System.out.printf("File %s does not exist%n", e.getMessage()); 
           System.exit(-1); 
          } catch (NoRegularFileException e) { 
           System.out.printf("File %s is not a regular file%n", e.getMessage()); 
           throw e; 
          } catch (AccessDeniedException e) { 
           System.out.printf(
            "Access rights are insufficient to read file %s%n", e.getMessage() 
           ); 
           throw new ReadFileException(e); 
          } catch (EOFException e) { 
           System.out.printf("File %s is empty%n", e.getMessage()); 
           throw new RuntimeException(e); 
          } 
         } 
         //some other code 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
    

Редактировать: Я должен был четко указать, что в конце будет основной код, поэтому я не могу просто закончить его.

+1

Это зависит от того, как вы определяете «лучший». – Kayaman

+0

Если улов является последней частью основного метода, выполняется улов, основной конец будет завершен. Если вы хотите сделать отчет об ошибках, вы всегда можете войти в блок catch. –

+0

Я предлагаю вам лучше * зарегистрировать * исключение, а не просто выбросить его или распечатать сообщение об ошибке. Кроме того, при печати сообщений об ошибках следует использовать 'Error Stream' (' System.err.println («Ваше сообщение»); '). Помимо этого, выход из программы с помощью System.exit (1); 'должен выполнять эту работу. – Lefteris008

ответ

0

Если вы хотите, чтобы он был чистым (т. Е. Не отображал stacktrace для пользователя), тогда исключение исключений исключает вопрос (по крайней мере, из основного). Тогда все зависит от того, хотите ли вы вернуть код выхода из программы, если нет.

Если вы хотите вернуть код выхода, вы должны использовать System.exit(int errcode);. В противном случае вы можете просто вернуться (или нормально выйти main).

+0

Верните это тогда. – kevinlelo

Смежные вопросы