Java - существует ли противоположность Crtrl-D? - PullRequest
0 голосов
/ 01 декабря 2018

Я использую сканер для чтения ввода в текстовый файл, где я публикую информацию об учетной записи.После этого я должен сделать то же самое с информацией о транзакции.Однако после того, как я закончу вводить информацию для класса учетной записи, я нажимаю Ctrl-D, как показано, чтобы указать конец файла (EOF) и существует цикл. Это замечательно, за исключением случаев, когда программа пытается открыть следующий файл, она пропускаетчасть, в которой мне разрешено вводить данные и просто завершает программу без ошибок.

Есть ли способ бороться или обойти это, чтобы я мог создавать несколько текстовых файлов и фактически вводить последовательные данные в одной программе, покаиспользуя сканер?

Вот мой код

  public class FileMatch
  {
  private Formatter output;
  private Formatter out;


    public void openOldMast()
    {
        try
        {
        output = new Formatter( "oldmast.txt" );
        } // end try
        catch ( SecurityException securityException )
        {
         System.err.println(
             "You do not have write access to this file." );
        System.exit( 1 );
        }
        catch ( FileNotFoundException filesNotFoundException )
        {System.err.println( "Error creating file." );
        System.exit( 1 );
        }
    }


    public void addMast()
    {
    Account record = new Account();

         Scanner input = new Scanner( System.in );



           System.out.printf( "%s\n%s",
              "Enter account number, first name, last name and balance.",
              "? " );

           while ( input.hasNext())
           {
              try
              {
                 record.setAccountNumber( input.nextInt() ); // read account number
                 record.setFirstName( input.next() ); // read first name
                 record.setLastName( input.next() ); // read last name
                 record.setBalance( input.nextDouble() ); // read balance

                 if ( record.getAccountNumber() > 0 )
                 {
                    output.format( "%d %s %s %.2f\n", record.getAccountNumber(),
                       record.getFirstName(), record.getLastName(),
                       record.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 elementException )
              {
                 System.err.println( "Invalid input. Please try again." );
                 input.nextLine(); // discard input so user can try again
              }

              System.out.printf("? " );
           }
        input.close();
        }

        public void closeMast()
        {
           if ( output != null )
              output.close();
        }



  public void openTrans()
  {
      try
      {
          out = new Formatter( "trans.txt" );
      }
      catch ( SecurityException securityException )
      {
          System.err.println(
                  "You do not have write access to this file." );
          System.exit( 1 );
      }
      catch ( FileNotFoundException filesNotFoundException )
      {System.err.println( "Error creating file." );
          System.exit( 1 );
      }
  }


  public void addTrans()
  {
      TransactionRecord rec = new TransactionRecord();

      Scanner inn = new Scanner( System.in );



      System.out.printf( "%s\n%s",
              "Enter account number and amount.",
              "? " );

      while ( inn.hasNext() )
      {
          try
          {
              rec.setAccountNumber( inn.nextInt() ); // read account number
              rec.setAmount( inn.nextDouble() ); // read balance

              if ( rec.getAccountNumber() > 0 )
              {
                  out.format( "%d %.2f\n", rec.getAccountNumber(),
                          rec.getAmount() );
              }
              else
              {
                  System.out.println(
                          "Account number must be greater than 0." );
              }
          }
          catch ( FormatterClosedException formatterClosedException )
          {
              System.err.println( "Error writing to file." );
              return;
          }
          catch ( NoSuchElementException elementException )
          {
              System.err.println( "Invalid input. Please try again." );
              inn.nextLine(); // discard input so user can try again
          }

          System.out.printf("? " );
      }
  }

  public void closeTrans()
  {
      if ( out != null )
          out.close();
  }
}

и вот мой главный

public static void main( String args[] )
{
    FileMatch app1 = new FileMatch();
    FileMatch app2 = new FileMatch();


    app1.openOldMast();
    app1.addMast();
    app1.closeMast();

    app2.openTrans();
    app2.addTrans();
    app2.closeTrans();



} // end main
...