質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

8464閲覧

テキストファイルのデータをArrayListに格納したい

oka12

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/04/17 08:13

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

root_jp

2018/04/17 08:41

テキストファイルにはどういった内容が出力されますか?
oka12

2018/04/17 08:56

「1佐藤19990203東京」みたいな感じで出力されます。
guest

回答1

0

ベストアンサー

1佐藤19990203東京のように出力してしまうと
ファイルから読み込む時にどこからどこまでがidでどこからどこまでがnameなのか分からないので、
何らかの文字で区切って出力するなどにすべきだと思います。
しかしそうしたらそうしたらで、区切り文字をidやnameで入力されてしまうと
正しい区切り位置が分からなくなるので、工夫が必要になってきますが、
とりあえずその辺りの話しは置いておいて、
カンマで区切られた1,佐藤,19990203,東京という内容をStudent2にしてみます。

カンマで区切って出力するにはtoString()を以下のようにすればよいでしょう。

Java

1public String toString(){ 2 return String.join(",", id, name, birth, address); 3}

ファイルは以下とします。

1,佐藤,19990203,東京 2,鈴木,19950405,大阪

Java

1Path filePath = Paths.get("C:\Users\REALSYS-0132\Desktop\タスク\タスク2\st.txt"); 2try (Stream<String> lines = Files.lines(filePath)) { 3 List<Student2> student2List = lines.map(line -> { 4 String[] cols = line.split(","); 5 return new Student2(cols[0], cols[1], cols[2], cols[3]); 6 }).collect(Collectors.toList()); 7}

投稿2018/04/17 09:15

root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oka12

2018/04/17 09:29

ありがとうございます! そのコードで試してみます!
oka12

2018/04/18 08:08

Streamやmap使うの初めてだったんですけど、listを全部Student2Listに置き換えることでうまくいきました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問