본문 바로가기

국비지원_핀테크

15일차_ [java] 미니 프로젝트 ( 파일 입출력, 스트림 클래스 활용 )

 

 

 

 

 

미니 프로젝트

- DB 를 연동하지 않아서 코드를 실행할때마다 데이터가 초기화 되는 문제를 파일로 객체 정보를 저장하여 해결해보자...!!!

 

 

 

회원 정보를 파일로 저장하고 등록, 확인, 탈퇴할 수 있는 프로그램

package file.main;

import java.util.Scanner;

import file.service.ServiceMember;
import file.service.ServiceMemberImpl;

public class MainClass {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num;
		ServiceMember member = new ServiceMemberImpl();
		
		while(true) {
			System.out.println("1. 회원가입");
			System.out.println("2. 검 색");
			System.out.println("3. 회원 목록 보기");
			System.out.println("4. 탈 퇴");
			System.out.println("5. 종 료");
			System.out.print(">>>> : ");
			num = sc.nextInt();
			
			switch(num) {
			case 1 : 
				member.register();
				break;
			case 2 : 
				member.search();
				break;
			case 3 : 
				member.list();
				break;
			case 4 : 
				member.delete();
				break;
			case 5 : 
				System.out.println("프로그램을 종료합니다.");
				break;
			default : 
				System.out.println("잘못 입력하셨습니다.");
				break;
			}
		}
	}
}

MainClass

 

package file.service;

public interface ServiceMember {
	public void register();
	public void list();
	public void delete();
	public void search();
}

ServiceMember

 

package file.service;

import java.util.Scanner;

import file.dao.MemberDAO;
import file.dto.MemberDTO;

public class ServiceMemberImpl implements ServiceMember {
	private MemberDAO dao;
	public ServiceMemberImpl() {
		dao = new MemberDAO();
	}
	
	@Override
	public void register() {
		MemberDTO dto = new MemberDTO();
		Scanner sc = new Scanner(System.in);
		System.out.print("아이디 입력 : ");
		dto.setId(sc.next());
		System.out.print("이름 입력 : ");
		dto.setName(sc.next());
		
		dao.register(dto);
	}
	
	public void list() {
		String[] listFile = dao.getList();
		if(listFile.length == 0) {
			System.out.println("저장된 목록이 없습니다!!!");
		}else {
			for(int i=0; i<listFile.length; i++) {
				System.out.println(i + ". " + listFile[i]);
			}
		}
	}
	
	public void delete() {
		Scanner sc = new Scanner(System.in);
		String id;
		System.out.print("삭제할 id 입력 : ");
		id = sc.next();
		dao.delete(id);
	}
	
	public void search() {
		Scanner sc = new Scanner(System.in);
		String id;
		System.out.print("검색할 id 입력 : ");
		id = sc.next();
		MemberDTO d = dao.search(id);
		if(d != null) {
			System.out.println("id : " + d.getId());
			System.out.println("name : " + d.getName());
		}
	}
}

ServiceMemberImpl

 

package file.dto;

import java.io.Serializable;

import lombok.Data;

@Data
public class MemberDTO implements Serializable{
					// serializble 상속 받아 직렬화
	private String id, name;
}

MemberDTO

 

package file.dao;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import file.dto.MemberDTO;

public class MemberDAO {
	// 객체가 저장될 path 설정
	private String path = "E:\\0.핀테크\\members\\";
	
	// 파일 입출력에 관련된 객체들을 선언
	private FileInputStream fis;
	private FileOutputStream fos;
	private BufferedInputStream bis;
	private BufferedOutputStream bos;
	private ObjectInputStream ois;
	private ObjectOutputStream oos;
	
	// 객체를 외부로 전송....
	public void register(MemberDTO dto) {
		//  String p = path + dto.getId() + ".txt";
		
		// 파일 클래스의 기능들을 사용하기 위해 String 자료형이 아닌
		// File 클래스를 사용
		File p = new File(path + dto.getId() + ".txt");
		
		// 동일한 이름의 회원 파일이 있는지 확인
		if(p.exists()) {
			System.out.println("이미 존재하는 회원입니다.");
		}else {
			try {
				fos = new FileOutputStream(p);
				bos = new BufferedOutputStream(fos);
				oos = new ObjectOutputStream(bos);
				oos.writeObject(dto);
				
				oos.close(); bos.close(); fos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			System.out.println("회원가입 성공!!!!!");
		}
	}
	
	public String[] getList() {
		File file = new File(path);
		return file.list();
	}
	
	public void delete(String id) {
		File file = new File(path + id + ".txt");
		if(file.exists()) {
			file.delete();
			System.out.println(id + " 가 삭제되었습니다.");
		}else {
			System.out.println("존재하지 않는 회원입니다.");
		}
	}
	
	public MemberDTO search(String id) {
		File file = new File(path + id + ".txt");
		MemberDTO dto = null;
		if(file.exists()) {
			try {
				fis = new FileInputStream(file);
				bis = new BufferedInputStream(fis);
				ois = new ObjectInputStream(bis);
				dto = (MemberDTO)ois.readObject();
				ois.close();
				bis.close();
				fis.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else {
			System.out.println("찾는 회원이 없습니다.");
		}
		return dto;
	}
}

MemberDAO

728x90