Я просматриваю книгу Java и теперь на класс Formatter выводят в текстовый файл. Я добавил дополнительную строку кода для тестирования toString()
в конце addRecords()
, но он не работает. Почему это так?Java Formatter class toString() не работает
Кроме того, я немного смущен насчет closeFile()
по адресу if (output != null)
, затем закройте файл. По моему мнению, я думал, что output
уже отформатировал все входные данные в текстовый файл, так как он все еще не равен нулю, что заставляет меня опробовать toString()
по адресу addRecords()
.
Заранее благодарен!
// Fig. 15.3: CreateTextFile.java
// Writing data to a sequential text file with class Formatter.
import java.io.FileNotFoundException;
import java.lang.SecurityException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class CreateTextFile
{
private static Formatter output; // outputs text to a file
public static void main(String[] args)
{
openFile();
addRecords();
closeFile();
}
// open file clients.txt
public static void openFile()
{
try
{
output = new Formatter("clients.text"); // open the file
}
catch (SecurityException securityException)
{
System.err.println("Write permission denied. Terminating.");
System.exit(1); // terminate the program
}
catch (FileNotFoundException fileNotFoundException)
{
System.err.println("Error opening file. Terminating.");
System.exit(1); // terminate the program
}
}
// add records to file
public static void addRecords()
{
Scanner input = new Scanner(System.in);
System.out.printf("%s%n%s%n? ",
"Enter account number, first name, last name and balance.",
"Enter end-of-file indicator to end input.");
while (input.hasNext()) // loop until end-of-file indicator
{
try
{
// output new record to file; assumes valid input
output.format("%d %s %s %.2f%n", input.nextInt(),
input.next(), input.next(), input.nextDouble());
}
catch (FormatterClosedException formatterClosedException)
{
System.err.println("Error writing to file. Terminating.");
break;
}
catch (NoSuchElementException elementException)
{
System.err.println("Invalid input. Please try again.");
input.nextLine(); // discard input so user can try again
}
System.out.println(output.toString());
System.out.print("? ");
} // end while
} // end method addRecords
// close file
public static void closeFile()
{
if (output != null)
output.close();
}
} // end class CreateTextFile
Вот вывод командной строки:
Введите номер счета, имя, фамилию и баланс.
Введите индикатор конца файла для завершения ввода.
? 100 Bob Blue 24.98 [email protected]
Я вижу ... Так что о другом вопросе относительно 'input! = Null', затем close()'? – Scorpiorian83
Эта часть вашего вопроса для меня не имеет смысла. Однако проблема может заключаться в том, что 'closeFile()' на самом деле вообще не вызван. Вы действительно должны использовать try-with-resources, чтобы гарантировать, что форматирование всегда закрыто. –
О, да, возможно, потому что я в начале главы, поэтому автор пытается сделать это простым. в любом случае, это оператор if, который меня смущает, как «выход» не равен нулю? – Scorpiorian83