![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
お世話になっております。
現在、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の質問です。テキストファイルのデ」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/7/542290605_56a0f26ec7e7b/M.png)
No.2ベストアンサー
- 回答日時:
ご提示の例では、複数行で一つレコード形式なので、以下の様な処理を組みましょう。
* ファイルを読み取り用に開く
* 配列を用意
* ファイルがまだ読み終わっていないなら、以下繰り返し
* * 一行読み取り → name に格納
* * 一行読み取り → age に格納
* * 一行読み取り → sex に格納
* * name,age,sex を「一つのオブジェクト」にして、配列に追加
* * 一行読み取り → 空行を読み飛ばし
* ファイルの読み取り終了
「一つのオブジェクト」と偉そうに言っていますが、
実際には "鈴木,23,女性" の様な String のことです。
2度もご解答していただきありがとうございました!
これから自分が何をすればいいかが分かりました!
また機会がありましたらよろしく御願い致します。
No.1
- 回答日時:
プログラムの最初にファイル内容を読み取って、配列に各レコードを格納する処理を追加しましょう。
新規登録時は今までどおりに、画面入力したレコードを「追加」でファイル出力。
削除時は、指定された番号のレコードを配列から削除してから、全レコードを「上書き」でファイル出力。
配列として使える便利なクラス
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 …
配列に格納するという手段があるのですね。
自分なりに調べてみたところ、1行ごとに読み込んで格納したり、「,」で区切って格納する方法は確認できましたが、List.1やList.2(上記)のように一まとめで格納する手段はあるのでしょうか?
重ね重ね申し訳ございません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Ruby vscode 文字化け 1 2022/05/21 19:17
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Ruby 教えてください 2 2023/01/04 17:50
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
equalsの逆
-
InputStream.read()でタイムア...
-
yyyymmddからyyyy/mm/d...
-
csv出力について
-
javaのfor文が機能してないみた...
-
Class.forNameでエラーになる
-
Javaでデータに登録する度にID...
-
テキストファイルから空白行をよむ
-
Javaの質問です。テキストファ...
-
JavaでString型をChar型に変換...
-
テキストファイルにおいて任意...
-
FileクラスのcanRead/canWrite...
-
Java 読み込んだテキストファイ...
-
Inputstreamについて
-
Java FileDialog に関して
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
-
System.err. printlnとSystem.o...
-
オブジェクトの中のプロパティ...
-
ページング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
equalsの逆
-
csv出力について
-
九九を横に表示する。
-
テキストファイルから空白行をよむ
-
Java int sum = 0は必要ですか?
-
[JAVA]エラーが解決できません。
-
javaのfor文が機能してないみた...
-
InputStream.read()でタイムア...
-
Servletでテキストボックスに入...
-
Javaでデータに登録する度にID...
-
Inputstreamについて
-
BufferedReaderでのエラー
-
FileクラスのcanRead/canWrite...
-
java連結
-
Java 読み込んだテキストファイ...
-
Javaの質問です。テキストファ...
-
テキストファイルの任意の文字...
-
Class.forNameでエラーになる
-
テキストファイルにおいて任意...
おすすめ情報