#java #bufferedreader #contains #bufferedwriter
#java #bufferedreader #содержит #bufferedwriter
Вопрос:
У меня есть следующая функция, которая должна записывать в файл только в том случае, если объект не входит в набор StudentList.
Я использую метод contains . Я уже переопределил метод hashcode и equals в классе Student. Набор работает правильно и не имеет напечатанных дубликатов, но когда я перехожу к текстовому файлу, появляется несколько значений одной и той же записи.
Мой код для main:
package fileproject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class FileManipulator {
Set <Student> studentList = new HashSet<Student>();
File file;
public void readData(String f) {
try {
//create a file
file = new File(f);
//instantiate the buffered
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while((line = reader.readLine()) != null) {
parseText(line);
}
reader.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void parseText(String line) {
String [] student = line.split(",");
Student s = new Student(Integer.parseInt(student[0]), student[1], student[2]);
studentList.add(s);
}
public void display() {
studentList.forEach(s -> System.out.println(s));
// studentList.clear();
}
public void appendData(String f, Student s) {
file = new File(f);
if (studentList.contains(s)) return; //I expect this value to be true
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
writer.newLine();
writer.append(s.toString());
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
FileManipulator myFile = new FileManipulator();
myFile.readData("students.txt");
Student st = new Student(4, "Mo Dna", "Genetics");
myFile.appendData("students.txt", st);
myFile.readData("students.txt");
myFile.display();
System.out.println(myFile.studentList.contains(st)); //this should return true but returns false
myFile.studentList.forEach(s -> System.out.println(s));
}
}
Что я делаю не так?
Комментарии:
1. где ваш список учащихся и как вы его вводите?
2. он находится в верхней части моего класса как
Set <Student> studentList = new HashSet<Student>();
3. при записи нового объекта student в file вам нужно добавить этого студента в свой список студентов.
4. Я отредактирую свой пост, чтобы он содержал весь файл класса для дальнейшего уточнения
5. Ваша
appendData
функция добавляет ваши данные, поэтому вы будете дублировать их.