System.exit (1) y volver

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();
    }
}

Me preguntaba por qué openFile()los catchbloques terminan con System.exit()y los catchbloques addRecords()terminan con return. ¿Hay una forma recomendada de cuándo se debe usar cada uno?

Respuesta 1

Ellos hacen cosas diferentes. returnsimplemente regresa de la función a la persona que llama y el programa continúa ejecutándose. System.exit()termina el programa; el control no vuelve a la persona que llama.

Debe usarlo System.exit()cuando su programa encuentre un error irrecuperable y no tenga sentido que el programa continúe ejecutándose. Úselo returncuando su programa pueda recuperarse con gracia, o cuando el programa deba realizar acciones de limpieza / cierre antes de salir.

Vea también esta discusión más extensa de System.exit().

Respuesta: 2

El returndebería haber sido un break, simplemente dejando el bucle while, para que scanner.close()se haga.

System.exites un mal estilo, pero factible para un programa de línea de comandos. No detectar la excepción sería algo similar: terminación con un mensaje, pero luego con un seguimiento de la pila también. En este caso, dejar que la función arroje una excepción sería la forma preferible.

Respuesta: 3

La declaración de retorno se utiliza dentro de un método para salir de ella. System.exit (0) se utiliza en cualquier método para salir del programa. System.exit (0) finaliza el programa por vía oral. Mientras que System.exit (1) finaliza el programa debido a algún error encontrado en el programa.

Respuesta: 4

Soy nuevo en GitPython y estoy tratando de obtener el contenido de un archivo dentro de una confirmación. Puedo obtener cada archivo de una confirmación específica, pero recibo un error cada vez que ejecuto el comando. Ahora yo ...

He instalado Xerces a través de Maven: <dependencies> <dependency> <groupId> junit </groupId> <artifactId> junit </artifactId> <version & ...

Tengo una tarea para mis clases: la clase debe tener un método para calcular el número de días entre dos fechas, devolver el día de la semana y dar el signo del zodiaco para un determinado ...

Me pregunto si hay alguna forma de establecer permisos de archivo predeterminados de los registros creados utilizando los archivos logging.properties de Tomcat. Mi archivo logging.properties tiene este aspecto: handlers = java.util.Logging ...