Ваш вопрос немного сбивает с толку, так как вы используете сериализацию объектов, но выбранное вами имя файла - .txt
. Сериализованные объекты не читаются человеком, как обычный текстовый файл.
Ответ Фабиана выше - это замечательно, если вы хотите использовать сериализацию. Однако, если вы хотите создать простой текстовый файл, взгляните на следующий пример программы:
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
ObservableList<Student> students = FXCollections.observableArrayList();
// Create some sample students
students.addAll(
new Student("Roger", "Rabbit"),
new Student("Elmer", "Fudd"),
new Student("Daffy", "Duck"),
new Student("Foghorn", "Leghorn"),
new Student("Betty", "Boop")
);
// Write the list to a text file
try {
writeToTextFile("students.txt", students);
} catch (IOException e) {
e.printStackTrace();
}
// Now, read the file into a new List<Student>
List<Student> inputStudents = null;
try {
inputStudents = readStudents("students.txt");
} catch (IOException e) {
e.printStackTrace();
}
// Print out the student names
if (inputStudents != null) {
for (Student student : inputStudents) {
System.out.println(student.toString());
}
}
}
/**
* Write the list of students to a simple text file with first and last names separated by a comma
*/
private static void writeToTextFile(String filename, ObservableList<Student> students)
throws IOException {
FileWriter writer = new FileWriter(filename);
for (Student student : students) {
writer.write(student.getFirstName() + "," + student.getLastName() + "\n");
}
writer.close();
}
/**
* Read the comma-separated list of student names from the text file
*/
private static List<Student> readStudents(String filename)
throws IOException {
List<Student> students = new ArrayList<>();
BufferedReader reader = Files.newBufferedReader(Paths.get(filename));
String line;
while ((line = reader.readLine()) != null) {
String[] names = line.split(",");
// Add the student to the list
students.add(new Student(names[0], names[1]));
}
return students;
}
}
Это создает очень простой текстовый файл с именем и фамилией каждого ученика в отдельной строке, разделенных запятой. Затем он читается обратно в новый список, готовый для использования в вашем TableView
.
Если вы решите пойти по этому пути, я рекомендую найти хорошую библиотеку CSV для обработки чтения / записи файлов CSV (значения, разделенные запятыми). У Apache Commons есть приличный доступный.