2009-08-04 40 views
3

私は実際にid numberに基づいてテキストファイルから行を削除する方法を持っていることに興味がありますが、これを達成する方法はわかりません。"studentId"に基づいてテキストファイルから行を削除するにはどうすればよいですか?

students.txtファイルは次のようになります。ここでは

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

私はコードのために、これまで持っているものです:


// 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

を、私はあなたが、少なくとも努力をしなかったなかったと仮定しますこの問題を解決するために。あなたの具体的な疑問をコードに書いておき、何を試してみましたか。 – OscarRyz

答えて

6

あなたは一時的なファイルへの書き込み、元のファイルから読み込むことができます指定されたIDと一致せず、最後に元のファイルが新しい一時ファイルに置き換えられます。

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

こんにちは、ありがとうございます、ソリューションをありがとう、コードを介してこれを実証することができます、私はJavaの総初心者です。ありがとうございます –

+0

あなたは行く、それはラフですが、それは動作するはずです。 javaを使ってコンマ区切りのテキストファイルを読み書きする方法については、オンラインの記事を見てください。 –

2

あなたはStringsplitメソッドを使用することができます。 ","に分割して、削除するIDのインデックス0を確認してください。 (私はその場合は何も印刷しません)。私はコード例を挙げたいが、Javaコンパイラはもうインストールされていない。

1

おそらくすべての生徒を読んで、そのIDに基づいて特定の生徒を書いてはいけません。だから、その場合には、それは次のようですので、あなたの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);} 
} 
関連する問題