2014-01-02 2 views
9
import java.io.FileNotFoundException; 
import java.util.Formatter; 
import java.util.FormatterClosedException; 
import java.util.NoSuchElementException; 
import java.util.Scanner; 

public class CreateTextFile 
{ 
    private Formatter formatter; 

    public void openFile() 
    { 
     try 
     { 
      formatter = new Formatter("clients.txt"); 
     } 

     catch (SecurityException securityException) 
     { 
      System.err.println("You do not have permission to access this file"); 
      System.exit(1); 
     } 

     catch (FileNotFoundException fileNotFoundException) 
     { 
      System.err.println("Error opening or creating the file"); 
      System.exit(1); 
     } 
    } 

    public void addRecords() 
    { 
     AccountRecord accountRecord = new AccountRecord(); 
     Scanner scanner = new Scanner(System.in); 

     System.out.printf("%s%n%s%n%s%n%s%n", "To terminate input, type the end-of-file indicator", "when you are prompted to enter input", "On Unix/Linux/Mac OS X type <control> d then press Enter", "On Windows type <ctrl> z then press Enter"); 

     while (scanner.hasNext()) 
     { 
      try 
      { 
       accountRecord.setAccountNumber(scanner.nextInt()); 
       accountRecord.setFirstName(scanner.next()); 
       accountRecord.setLastName(scanner.next()); 
       accountRecord.setBalance(scanner.nextDouble()); 

       if (accountRecord.getAccountNumber() > 0) 
        formatter.format("%d %s %s %,.2f%n", accountRecord.getAccountNumber(), accountRecord.getFirstName(), accountRecord.getLastName(), accountRecord.getBalance()); 
       else 
        System.out.println("Account number must be greater than 0"); 
      } 

      catch (FormatterClosedException formatterClosedException) 
      { 
       System.err.println("Error writing to file"); 
       return; 
      } 

      catch (NoSuchElementException noSuchElementException) 
      { 
       System.err.println("Invalid input. Try again"); 
       scanner.nextLine(); 
      } 

      System.out.printf("%s %s%n%s", "Enter account number (>0),", "first name, last name and balance.", "?"); 
     } 
     scanner.close(); 
    } 

    public void closeFile() 
    { 
     if (formatter != null) 
      formatter.close(); 
    } 
} 

мне было просто интересно, почему в openFile() в catch блоках заканчиваются System.exit() и catch блоков в addRecords()return оканчиваются. Есть ли рекомендуемый способ использования каждого из них?System.exit (1) и возврат

ответ

14

Они делают разные вещи. return просто возвращает функцию к вызывающей программе, и программа продолжает работать. System.exit() завершает работу программы; управление не возвращается к вызывающему абоненту.

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

См. Также more extended discussion of System.exit().

+3

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

+1

@MadPhysicist Согласен, хороший момент. – TypeIA

1

return должен был быть break, просто оставив цикл while, так что scanner.close() сделан.

System.exit - плохой стиль, но возможен для командной строки. Не поймать исключение будет несколько одинаков: завершение с сообщением, но затем с трассировкой стека. В этом случае предпочтительным будет вариант исключения пользователем.

0

return заявление используется внутри метода, чтобы выйти из него. System.exit (0) используется в любом способе для выхода из программы. System.exit (0) завершает программу narmally.Whereas System.exit (1) завершает работу программы из-за некоторой ошибки, возникающей в программе.

-3

System.exit() завершает программу в строке вызова. System.exit(1) завершает работу программы при возникновении ошибки.

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