После закрытия stdin
(путем ввода ^D
с клавиатуры) он больше не будет вводить.Таким образом, input.hasNext()
в вашем методе addRecordToMainFile
будет работать, пока stdin
не будет исчерпан.Когда addRecordToTransactionFile
выполняется, stdin
является все еще закрытым и больше не будет вводить , поэтому метод полностью пропускает цикл while
.
Чтобы получить один вход для записи внесколько выходных файлов, я бы порекомендовал один из двух следующих параметров:
- Используйте токен для каждой входной записи, чтобы указать тип транзакции (куда она должна идти).Например:
M 100 Alan_Jones 232.32 (goes to main file)
T 100 Alan_Jones 232.32 (goes to transaction file)
- Используйте разделитель между сечениями входного файла.Например:
MAIN
100 Alan_Jones 232.32
100 Alan_Jones 232.32
100 Alan_Jones 232.32
100 Alan_Jones 232.32 (all these go into the main file)
TRANSACTION
100 Alan_Jones 232.32
100 Alan_Jones 232.32
100 Alan_Jones 232.32
100 Alan_Jones 232.32 (all these go into the transaction file)
Ваша логика чтения ввода должна быть более сложной, чтобы обрабатывать ввод.Обратите внимание, что второй вариант очень похож на схему, которую вы уже опробовали, за исключением того, что символ «конец файла» (^D
) был заменен другим маркером в файле, который не является «специальным» для потока UNIX.system: строка «TRANSACTION».
Но вы не можете прочитать из stdin
после закрытия потока, поэтому поиск ^D
/ ожидание input.hasNext
возврата false
не будет работать.