Как удалить строку из текстового файла на основе "studentId"? - PullRequest
3 голосов
/ 04 августа 2009

Мне действительно интересно иметь метод, который может удалить строку из текстового файла на основе id number, но я не знаю, как этого добиться.

Файл students.txt выглядит следующим образом:

1111111,John Smith<br/> 
7777777,Dave Smith

Вот что я получил за код: Публичный класс Студент:

public class Student  {
    // instance variables
    private int studentId;
    private String name;

    /**
     * Constructor for objects of class Student
     */
    public Student(int id, String name) {
        this.name = name;
        studentId = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        name = newName;
    }

    public void setId(int newId) {
        studentId = newId;
    }

    public int getId() {
        return studentId;
    }
}

открытый класс EnrollmentController:

public class EnrollmentController {
    private Student theStudent;
    private BufferedWriter writer;
    private BufferedReader reader;
    private final File studentFile = new File("students.txt");
    private ArrayList students = new ArrayList();

    public EnrollmentController() {
        readFromStudentFile();

    }

    public ArrayList getStudents() {
        return students;
    }

    public void addStudent(int id, String name) {
        students.add(new Student(id, name));
    }

    public void printClassList(String courseId) {

    }

    public void writeToStudentFile(int id, String name) {
        try {
            writer = new BufferedWriter(new FileWriter(studentFile, true));
            writer.write(id + "," + name + "\n");
            writer.flush();
            writer.close();
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    public void readFromStudentFile() {
        students = new ArrayList();

        try {
            reader = new BufferedReader(new FileReader(studentFile));

            String line = reader.readLine();

            while (line != null) {
                String[] record = line.split(",");
                int id = Integer.parseInt(record[0]);
                Student s = new Student(id, record[1]);
                students.add(s);
                line = reader.readLine();
            }

            reader.close();
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    public Student findStudent(int id) {
        boolean found = false;
        Iterator it = students.iterator();
        while (it.hasNext() && !found) {
            Student s = (Student) it.next();
            if (s.getId() == id) {
                found = true;
                return s;
            }
        }
        return null;
    }

    {
        boolean found = false;
        {
            {
                found = true;
            }
        }
    }
}

Ответы [ 3 ]

7 голосов
/ 04 августа 2009

Вы можете прочитать из исходного файла, записать во временный файл только те записи, которые не соответствуют указанному идентификатору, а затем в конце заменить исходный файл новым временным файлом.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Writer;
public class Demo{
  public static void main(String[] argv)
                        throws Exception{
    Writer output = new BufferedWriter(new FileWriter("fixed.txt"));
    BufferedReader freader =
     new BufferedReader(new FileReader("orinal.txt"));
    String s;
    while ((s=freader.readLine())!=null){
      String tokens[] = s.split(",");
      String id = f[0];
      String name = f[1];
      // check against the ID or ID's you don't want. If the current ID is not the one
      // you don't want then write it to the output file
      if (!id.equals("00001") {
          output.write(s + "\n");
      }
    }
    freader.close();
    output.close();
  }
}
2 голосов
/ 04 августа 2009

Вы можете использовать String split метод. Разделитесь на "," и затем проверьте индекс 0 для идентификатора, который вы хотите удалить. (Т.е. в этом случае ничего не печатать.) Я бы привел пример кода, но у меня больше не установлен компилятор Java.

1 голос
/ 04 августа 2009

Предположительно, вы хотите прочитать всех учеников, но не написать конкретного ученика на основании идентификатора. Поэтому в этом случае измените ваш метод writeToStudentFile () так, чтобы он был похож на следующее:

public void writeToStudentFile(int idToIgnore)
{
    try{
        writer = new BufferedWriter(new FileWriter(studentFile, true));
        Iterator it = students.iterator();
        while (it.hasNext())
        {
            Student s = (Student)it.next();
            if (s.getId() != idToIgnore)
            {
                writer.write(s.getId() + "," + s.getName() + "\n");
            }
        }
        writer.flush();
        writer.close();
    }
    catch(IOException e){System.out.println(e);}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...