2009-08-04 9 views
3

Je suis vraiment intéressé d'avoir une méthode qui peut supprimer une ligne du fichier texte basé sur un id number, mais je ne sais pas comment y parvenir.Comment supprimer une ligne du fichier texte basé sur "studentId"?

Le fichier students.txt ressemble:

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

Voici ce que j'ai jusqu'à présent le code:


// class Student 
import java.io.*; 

public class Student implements Serializable
{
// 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; } }
// class EnrollmentController
import java.util.*; import java.io.*; 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(); /** * Constructor for objects of class EnrollmentController */ 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; } } } }
+0

Basé sur le code source que vous avez fourni, et le niveau de la question, je suppose que vous ne l'avez pas fait au moins un effort résoudre le problème. Postez quels sont vos doutes spécifiques sur le code et qu'avez-vous déjà essayé. – OscarRyz

Répondre

6

Vous pouvez lire à partir du fichier d'origine, écrire dans un fichier temporaire seulement les enregistrements qui ne correspondent pas à l'ID spécifié puis à la fin remplacent le fichier d'origine par le nouveau fichier temporaire.

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(); 
    } 
} 
+0

Salut, merci pour la solution, mais pouvez-vous s'il vous plaît démontrer cela à travers le code, parce que je suis débutant total en Java. merci –

+0

Voilà, c'est dur mais ça devrait marcher. Regardez les articles en ligne sur la lecture/écriture de fichiers texte délimités par des virgules en utilisant java. –

2

Vous pouvez utiliser la méthode de splitString. Diviser sur "," puis vérifier l'index 0 pour l'ID que vous souhaitez supprimer. (C'est-à-dire n'imprime rien dans ce cas.) Je donnerais un exemple de code, mais je n'ai plus de compilateur Java installé.

1

Vraisemblablement, vous voulez lire tous les étudiants, mais ne pas écrire un étudiant spécifique en fonction de l'ID. Donc, dans ce cas, modifiez votre méthode il est semblable au suivant 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);} 
} 
Questions connexes