初めて利用させていただきます。
現在私は、テキストファイルを用いるJavaの勉強をしております。
テキストファイルに、コンソールで入力した「name」「job」「sex」を出力する、また、テキストファイルに書き込まれたデータをコンソールに表示する機能はなんとか作成することが出来ました。
しかし、テキストファイルに書き込まれているデータを上書き(部分的に削除)する機能で詰まってしまいました。自分なりに調べたり、試してみたのですが思うように出来ませんでした。
上書き(一部削除)する時は、数字が入力されたら、それに対応した「Person」クラスの「name」「job」「sex」を一括でしたいです。
どなたかお力をお貸しください。お手数ですが、よろしく御願い致します。
//txtのデータ
List.1//1が入力されたら削除
田中
医者
男性
List.2//2が入力されたら削除
鈴木
看護師
女性
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
public class Editing {
class Person { // 1人分のデータを格納するクラス
private String name;
private String job;
private String sex;
public String getName() { return name; } public void setName(String name) { this.name = name; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } private boolean checkBeforeReadFile(File file) { if (file.exists()) { if (file.isFile() && file.canRead()) { return true; } } return false; }
// ファイルを読み込む
public ArrayList<Person> readFile(File file) {
int i = 0;
ArrayList<Person> list = new ArrayList<Person>();
BufferedReader br = null;
try {
if (checkBeforeReadFile(file)) {
br = new BufferedReader(new FileReader(file));
String line = null;
Person person = null;
while ((line = br.readLine()) != null) {
switch (i) {
case 0: // 名前
person = new Person(); // Person クラスのインスタンスを生成
person.setName(line); // 名前を格納
i++; // 次は i = 1 → 職業
break;
case 1: // 職業
person.setJob(line); // 職業を格納
i++; // 次は i = 2 → 性別
break;
case 2: // 性別
person.setSex(line); // 性別を格納
list.add(person); // 1人分のデータの格納が完了したので、リストに追加
i=0; // 次は i = 0 → 名前
break;
} } } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return list; }
// 全員分のデータを表示する
private void showPeople(ArrayList<Person> list) {
for (Person person : list) {
System.out.println("名前:" + person.getName());
System.out.println("職業:" + person.getJob());
System.out.println("性別:" + person.getSex());
}
}
public static void main(String[] args) {
try{
File file = new File("sample.txt");
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file,true))); BufferedReader br = new BufferedReader(new FileReader(file)); Editing editing = new Editing(); ArrayList<Person> list = editing.readFile(file); editing.showPeople(list); 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 job = new java.util.Scanner(System.in).nextLine(); System.out.println("性別を入力してください"); String sex = new java.util.Scanner(System.in).nextLine(); pw.println(name); pw.println(job); pw.println(sex); /* pw.println("\n");*/ pw.close(); System.out.println("連絡先を追加しました"); } if(input == 1){ //削除 } } catch(IOException e){ System.out.println(e); } }
}

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。