前提・実現したいこと
EclipseのJavaを使用し、学生情報管理システムを作っています。
Eclipseで入力した情報をローカルのテキストファイル
に保存したうえ、ファイルのデータの取出しをしたいと思っています。
仮想上に格納するツールとしてArrayListを使っているのですが、現状学生情報の検索をしたり
削除をするときにArrayListから該当するデータを探しているので、テキストファイルの情報と食い違いが生じます。その食い違いをなくし、なんとかArrayListの情報とテキストファイルの情報を同期したいです。
該当のソースコード
Java ソースコード import java.io.*; import java.util.ArrayList; public class Student2 { public String id ; public String name ; public String birth ; public String address ; //コンストラクタ public Student2 (String id, String name, String birth, String address){ this.id = id; this.name = name; this.birth = birth; this.address = address; } //オブジェクトの値を取得 public String getId() { return this.id; } public String getName() { return this.name; } public String getBirth() { return this.birth; } public String getAddress() { return this.address; } //オブジェクトの値をセット public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public void setBirth(String birth) { this.birth = birth; } public void setAddress(String address) { this.address = address; } //オブジェクト型をString型に変換 public String toString(){ return id + name + birth + address; } public static void main(String[] args) { Student2 st; //Studentリストの作成 ArrayList<Student2> list = new ArrayList<Student2>(); //ファイルクラスの作成 File file = new File("C:\Users\REALSYS-0132\Desktop\タスク\タスク2\st.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); String line; boolean quit = false; try { while (!quit) { //メニュー選択 System.out.println("◆メニュー番号を選択してください。"); System.out.println("----------------------------------------------------"); System.out.println("1.学生情報新規登録 (*)"); System.out.println("2.学生情報検索 (*)"); System.out.println("3.学生情報削除"); System.out.println("4.学生情報更新"); System.out.println("5.閉じる (*)"); System.out.println("----------------------------------------------------"); line = reader.readLine(); int n = Integer.parseInt(line); switch(n) { case 1 : // 1.登録 System.out.println("■IDを入力して下さい。"); String id = reader.readLine(); System.out.println("■氏名を入力して下さい。"); String name = reader.readLine(); System.out.println("■生年月日を入力して下さい。"); String birth = reader.readLine(); System.out.println("■住所を入力してください。"); String address = reader.readLine(); //Studentオブジェクトの作成 st = new Student2(id, name, birth, address); //listへ値を追加 list.add(st); //ファイルへ値を追加 PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); for (Student2 result : list) { pw.println(result); } pw.close(); System.out.println(""); System.out.println(list.size() + "人を登録しました。"); System.out.println("下記の人物が登録されています。"); System.out.println(""); System.out.println("-----------------------"); for (int i = 0; i < list.size(); i++) { //ID表示 System.out.println("ID: " + list.get(i).getId()); //名前表示 System.out.println("名前: " + list.get(i).getName()); //生年月日表示 System.out.println("生年月日: " + list.get(i).getBirth()); //住所表示 System.out.println("住所: " + list.get(i).getAddress()); } System.out.println("-----------------------"); System.out.println(""); break; case 2 : // 2.検索 FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String data = br.readLine(); System.out.println("表示したい学生の氏名を入力してください。"); String input= reader.readLine(); boolean ex = false; for (int i = 0; i < list.size(); i++) { if(input.equals(list.get(i).getName())) { //ID表示 System.out.println("ID: " + list.get(i).getId()); //名前表示 System.out.println("名前: " + list.get(i).getName()); //生年月日表示 System.out.println("生年月日: " + list.get(i).getBirth()); //住所表示 System.out.println("住所: " + list.get(i).getAddress()); ex = true; } } if (ex == false) { System.out.println("該当するデータはありません。"); } break; case 3 : // 3.削除 System.out.println("削除したい学生の氏名を入力してください。"); String input2= reader.readLine(); boolean ex2 = false; for (int i = 0; i < list.size(); i++) { if (input2.equals(list.get(i).getName())) { list.remove(list.get(i)); System.out.println("該当データを削除しました。"); //リストの削除をファイルにも反映 PrintWriter pw2 = new PrintWriter(new BufferedWriter(new FileWriter(file))); for (Student2 result : list) { pw2.println(result); } pw2.close(); ex2 = true; } } if (ex2 == false) { System.out.println("該当するデータはありません。"); } System.out.println(""); System.out.println(list.size() + "人を登録済みです。"); System.out.println("下記の人物が登録されています。"); System.out.println("----------------------"); for (int i = 0; i < list.size(); i++) { //ID表示 System.out.println("ID: " + list.get(i).getId()); //名前表示 System.out.println("名前: " + list.get(i).getName()); //生年月日表示 System.out.println("生年月日: " + list.get(i).getBirth()); //住所表示 System.out.println("住所: " + list.get(i).getAddress()); } System.out.println("----------------------"); break; case 4 : // 4.更新 System.out.println("更新したい学生のIDを入力してください。"); String input3= reader.readLine(); boolean ex3 = false; for (int i = 0; i < list.size(); i++) { if (input3.equals(list.get(i).getId())) { System.out.println("データの更新をします"); System.out.println(""); System.out.println("■IDを入力して下さい。"); id = reader.readLine(); System.out.println("■氏名を入力して下さい。"); name = reader.readLine(); System.out.println("■生年月日を入力して下さい。"); birth = reader.readLine(); System.out.println("■住所を入力してください。"); address = reader.readLine(); list.get(i).setId(id);; list.get(i).setName(name); list.get(i).setBirth(birth); list.get(i).setAddress(address); //リストの削除をファイルにも反映 PrintWriter pw3 = new PrintWriter(new BufferedWriter(new FileWriter(file))); for(Student2 result : list){ pw3.println(result); } pw3.close(); ex3 = true; } } if (ex3 == false) { System.out.println("該当するデータはありません。"); } System.out.println(""); System.out.println(list.size() + "人を登録済みです。"); System.out.println("下記の人物が登録されています。"); System.out.println("----------------------"); for (int i = 0; i < list.size(); i++) { //ID表示 System.out.println("ID: " + list.get(i).getId()); //名前表示 System.out.println("名前: " + list.get(i).getName()); //生年月日表示 System.out.println("生年月日: " + list.get(i).getBirth()); //住所表示 System.out.println("住所: " + list.get(i).getAddress()); } System.out.println("----------------------"); break; case 5 : // 5.終了 quit = true; break; default : System.out.println("1~5の間の番号を入力して下さい。"); break; } } }catch (IOException e) { System.out.println(e); } } }
試したこと
現状ToStringを使用することで、入力したデータをリストに格納し、それをファイルに書き込むまでは
うまくいっているのですが、逆にテキストファイルの内容をArrayListに反映させる方法が分からないです。具体的には、FileReader、BufferedReaderクラスで読み取ったデータのデータ型はString型なのに、ListはStudent2型なのでその変換方法が不明です(あればですが…)。
補足情報(FW/ツールのバージョンなど)
Eclipse(Neon.3 Release(4.6.3))
回答1件
あなたの回答
tips
プレビュー