dポイントプレゼントキャンペーン実施中!

お世話になっております。

現在、Javaを用いてテキストファイルのデータを読み書きする機能を作成しております。
キーボードから0(新規登録)と入力すると、テキストファイルに書き込む機能は、色々調べながら自分の力で下記のように(お見苦しいかもしれませんが)作成することが出来ました。

しかし、1(削除)と入力した後に、下記画像のように「1」か「2」を入力することによって選択した部分だけを削除できる機能を作成したいのですが、手詰まっております。
1回目に書き込みをする場合は「1」、2回目に書き込みをする場合は「2」といったように関連付けることは可能なのでしょうか?


お手数ですが、どなたかご教授よろしく御願い致します。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

class main{
public static void main(String args[]){
try{
File file = new File("sample.txt");

if (checkBeforeWritefile(file)){
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file,true)));
/* if (file.exists()){
//データ表示
}
else{
System.out.println("データがありません");
}
*/
System.out.println("0:新規登録 1:削除");
int input = new java.util.Scanner(System.in).nextInt();
if(input == 0){
System.out.println("名前を入力してください");
String name = new java.util.Scanner(System.in).nextLine();
System.out.println("年齢を入力してください");
String age = new java.util.Scanner(System.in).nextLine();
System.out.println("性別を入力してください");
String sex = new java.util.Scanner(System.in).nextLine();
pw.println(name);
pw.println(age);
pw.println(sex);
pw.println("\n");
pw.close();
System.out.println("連絡先を追加しました");
}

if(input == 1){
//削除
}

}
else{
System.out.println("ファイルに書き込めません");
}
}
catch(IOException e){
System.out.println(e);
}
}

private static boolean checkBeforeWritefile(File file){
if (file.exists()){
if (file.isFile() && file.canWrite()){
return true;
}
}
return false;
}
}

「Javaの質問です。テキストファイルのデ」の質問画像

A 回答 (2件)

ご提示の例では、複数行で一つレコード形式なので、以下の様な処理を組みましょう。



* ファイルを読み取り用に開く
* 配列を用意
* ファイルがまだ読み終わっていないなら、以下繰り返し
* * 一行読み取り → name に格納
* * 一行読み取り → age に格納
* * 一行読み取り → sex に格納
* * name,age,sex を「一つのオブジェクト」にして、配列に追加
* * 一行読み取り → 空行を読み飛ばし
* ファイルの読み取り終了

「一つのオブジェクト」と偉そうに言っていますが、
実際には "鈴木,23,女性" の様な String のことです。
    • good
    • 0
この回答へのお礼

2度もご解答していただきありがとうございました!
これから自分が何をすればいいかが分かりました!
また機会がありましたらよろしく御願い致します。

お礼日時:2016/01/23 02:01

プログラムの最初にファイル内容を読み取って、配列に各レコードを格納する処理を追加しましょう。


新規登録時は今までどおりに、画面入力したレコードを「追加」でファイル出力。
削除時は、指定された番号のレコードを配列から削除してから、全レコードを「上書き」でファイル出力。

配列として使える便利なクラス
https://docs.oracle.com/javase/jp/8/docs/api/jav …
配列から特定のレコードを削除するメソッド
https://docs.oracle.com/javase/jp/8/docs/api/jav …
追加と上書きを制御する箇所
https://docs.oracle.com/javase/jp/8/docs/api/jav …
    • good
    • 0
この回答へのお礼

配列に格納するという手段があるのですね。
自分なりに調べてみたところ、1行ごとに読み込んで格納したり、「,」で区切って格納する方法は確認できましたが、List.1やList.2(上記)のように一まとめで格納する手段はあるのでしょうか?
重ね重ね申し訳ございません。

お礼日時:2016/01/22 16:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!