Я использую сканер для чтения ввода в текстовый файл, где я публикую информацию об учетной записи.После этого я должен сделать то же самое с информацией о транзакции.Однако после того, как я закончу вводить информацию для класса учетной записи, я нажимаю 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