連絡先管理プログラム[ver.4.0]


連絡先マネージャver。4.0 データモデル:name、phone、email 機能:連絡先の登録、完全検索、詳細検索、連絡先の変更、連絡先の削除 UI構造: 0.終了|1。登録全文検索|3。詳細検索変更削除 アップグレード内容:連絡先登録/検索/変更/削除データをデータファイルに保存します。int String入力時処理異常

ファイルにデータを保存する場合は、ファイルを作成して起動する必要があります.プログラムが実行されると、プログラムが起動するとすぐにインスタンスが作成されるため、作成者の優先度が最も高いため、保存用のファイルを作成することもできます.ジェネレータからファイルを作成します.
private ContactDAOImple() {
	initDataDir();
	initDataFile();
};
ファイルを使って保存するときの流れを考えてみましょうか?データを入力すると、ファイルにデータを保存します.データを削除すると、削除処理されたデータをファイルに再保存します.データを検索する場合は、ファイルにデータを読み込み、終了時に既存のデータを保持する必要があるため、再実行時に既存のデータをロードすればよい.
private void writeDataToFile() {
	OutputStream out=null;
	BufferedOutputStream bout=null;
	ObjectOutputStream oout=null;
		
	try {
		out=new FileOutputStream(dataFile);
		bout=new BufferedOutputStream(out);
		oout=new ObjectOutputStream(bout);
        
		oout.writeObject(list);
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		try {
			oout.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}//end writeDataToFile()
	
private void readDataFromFile() {
	InputStream in=null;
	BufferedInputStream bin=null;
	ObjectInputStream oin=null;
	
	try {
		in=new FileInputStream(dataFile);
		bin=new BufferedInputStream(in);
		oin=new ObjectInputStream(bin);		
		list=(ArrayList<ContactVO>) oin.readObject();
		
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		try {
			oin.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}//end readDataFromFile()
エラーが発生しました。 データを保存せずにプログラムを最初に実行してプログラムを終了すると、再実行時にエラーが発生します。データファイルは作成されましたが、保存されているデータはありません。
private void initDataDir() {
	dataDir=new File(DATA_DIR);
	System.out.println("폴더 경로 : "+dataDir.getPath());
	System.out.println("절대 경로 : "+dataDir.getAbsolutePath());
		
	if(!dataDir.exists()) {
		if(dataDir.mkdir()) {
			System.out.println(">>폴더를 생성했습니다.");
		}else {
			System.out.println(">>폴더를 생성할 수 없습니다.");
		}
	}else {
		System.out.println(">>폴더가 이미 존재합니다.");
	}
	
}//end initDataDir()
	
private void initDataFile() {
	String filePath=DATA_DIR+File.separator+DATA_FILE;
	dataFile=new File(filePath);
	System.out.println("파일 경로 : "+dataFile.getPath());
	System.out.println("절대 경로 : "+dataFile.getAbsolutePath());
	
	if(!dataFile.exists()) { 
		try {
			if(dataFile.createNewFile()) {
				System.out.println(">>새로운 데이터 파일을 생성했습니다.");
				writeDataToFile();
				// list가 비어있어도 file에 저장하기
			}else {
				System.out.println(">>파일을 생성할 수 없습니다.");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}else {
		System.out.println(">>기존 데이터가 존재합니다.");	
		readDataFromFile();
		// 시작하기 전 데이터를 불러오기
	}
}//end initDataFile()
データがリストに入っていなくても、writeDataToFile()メソッドの位置はファイルの生成に伴ってリストを保存し、空のデータがリストに入っても動作している場合は、正常に動作していることを確認できます.
if(list==null) {
	list = new ArrayList<ContactVO>();
}else {				
	readDataFromFile();
}
この方式でもやってみましたが、ダメではありませんでしたが、コードの毒性が悪かったので淘汰されました.こうやって学んだんですね~🧐
次に、新しいデータを格納する必要がある「連絡先の登録」、「連絡先の変更」および「連絡先の削除」メソッドでwriteDataToFile()が呼び出されます.
従来,ユーザはint値を入力することでメニュー選択とインデックス入力を受信していた.Integer.parseInt(sc.nextLine())に変更し、文字入力時にも数字を認識できるようにします.
数字ではなく他の文字を入力すると、NumberFormatExceptionの異常が発生したすべての瞬間をtry-catchとして異常処理します.

将来の更新


コンソール画面ではなくGUIとしてUIを提供