I have written this code that should save a series of user input into a txt file for later use. My program creates a .txt file but does not write anything in it
// Fig. 6.30: CreateTextFile.java
// Writing data to a sequential text file with class Formatter.
import java.util.Formatter;
import java.util.Scanner;
public class CreateTextFile {
public static void main(String[] args) throws Exception {
Formatter output = new Formatter( "students.txt" ); // open the file
Scanner input = new Scanner( System.in ); // reads user input
String fullName; // stores student's name
int age; // stores age
String grade; // stores grade
double gpa; // stores gpa
System.out.println( "Enter student name, age, grade, and gpa.");
while ( input.hasNext() ) { // loop until end-of-file indicator
// retrieve data to be output
fullName = input.next(); // read full name
age = input.nextInt(); // read age
grade = input.next(); // read grade
gpa = input.nextDouble(); // read gpa
} // end while
output.close(); // close file
}
}
You have to use output.format
and ideally also output.flush
to flush the content written by the formatter instance to the file.
Here is a working version which asks the user for input and writes to the file flushing it immediately afterwards. The file is also closed after execution using try with resources.
public static void main(String[] args) throws Exception {
try(Formatter output = new Formatter( "students.txt" )) { // open the file
Scanner input = new Scanner(System.in); // reads user input
String fullName; // stores student's name
int age; // stores age
String grade; // stores grade
double gpa; // stores gpa
do { // loop until end-of-file indicator
System.out.println("Enter student name, age, grade, and gpa or type 'q' to quit");
// use nextLine, if reading input with spaces in this case
fullName = input.nextLine(); // read full name
if ("q".equals(fullName)) {
break;
}
age = input.nextInt(); // read age
grade = input.next(); // read grade
gpa = input.nextDouble(); // read gpa
output.format("fullName: %s; age: %s; grade: %s; gpa: %s%n", fullName, age, grade, gpa);
output.flush();
} while (true);
}
}
Because you are not writing anything to the file.
output.write(DataYouWantToWrite)
If i remember correct is the method you need to call.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.