Как писать и удалять объекты из RandomAccessFile?

В настоящее время я работаю над школьным проектом, для которого мне нужно сохранить свои данные в файл RandomAccessFile. Я понял, что это далеко не самый эффективный способ, но я должен это сделать. Примечание. Я должен использовать класс RandomAccessFile.

Я понимаю, как я могу сохранить простые strings и int, созданные в основном методе, в файл, но у меня возникают проблемы с переносом этих знаний в мою собственную программу.

У меня есть 4 разных класса, то есть Database, Group, Student, Rehearsal. Класс Database позволяет добавлять группы в связанный список групп. Затем в каждую группу вы можете добавить студентов (см. ниже), а также даты репетиций (это программа управления театром). Они добавляются к linkedlist<Student> и linkedlist<Rehearsal> соответственно.

Это мой метод addStudent в классе Group, который добавляет учащегося в связанный список созданной группы.

public void addStudent(int id, String firstname, String lastname) throws IOException {
    Student newstudent = new Student(id, firstname, lastname);
    if (!Students.contains(newstudent)) {
        Students.add(newstudent);
} else 
        JOptionPane.showMessageDialog(null, "Student with ID " + id
                + " already exists in group!", "Error",
                JOptionPane.WARNING_MESSAGE);
}

Как разрешить методу автоматически записывать объект студента в файл при его выполнении?

Это мой метод removeStudent:

public void removeStudent(int id) {
    if (!Students.remove(new Student(id, null, null))) {
        JOptionPane.showMessageDialog(null, "Student with ID[" + id
                + "] not present. System unchanged.");

    } 
}

Практически тот же вопрос, как я могу удалить определенный объект из файла при выполнении метода. Если бы вы могли мне помочь и с этим, было бы здорово :)


person Nino    schedule 09.04.2013    source источник


Ответы (2)


переопределите метод toString() класса объекта так, как вы хотите записать в файл!

затем выполните цикл, используя foreach поверх linkedlist, вызовите toString() на объекте ученика и запишите в файл

пример:

fileOutputStream outStream=newFileOutputStream("../RandomAccessFile");//path where you want to create file
foreach(Student s in linkedlist)
{
  outStream.println(s.toString()+"/n");
}
person Nomesh Gajare    schedule 09.04.2013
comment
Спасибо, но это не RandomAccessFile, не так ли? Потому что мне нужно сохранить свои данные с помощью класса RandomAccessFile, и мне нужно использовать метод seek при записи, удалении или чтении из файла. - person Nino; 09.04.2013

Вы не можете ничего удалить из RandomAccessFile, за исключением реализации какого-либо файлового протокола, который понимает ваш код, например, заполнения записи нулями, предполагая, что в вашем файле есть записи, и предполагая, что все нули (или что-то еще) не является допустимым значением записи. . Или внедрите байтовый заголовок для каждой записи, где 1 означает наличие, а 0 – удаление, или наоборот.

person user207421    schedule 09.04.2013