입출력 스트림 사용_ArrayList_Scanner

해당 Data Base File에 데이터 등록, 출력, 수정, 삭제, 저장

 

Board ( DTO )  Serializable구현해야 Scanner 가능

lombok jarFile 적용해서 ( 생성자, Getter / Setter, toString 등 @... 구현 가능 ( @Data는 전부 )  

package sec04.exam03;

import java.io.Serializable;
import java.util.Date;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@AllArgsConstructor
@Getter
@Setter
@NoArgsConstructor
public class Board implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int bno;
	private String title;
	private String content;
	private String writer;
	private Date date;

}

 

package sec04.exam03;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class BoardService {
    private List<Board> list = new ArrayList<>();
    private Scanner scanner = new Scanner(System.in);
    
    private int counter = 1000;
    
    
    // 사용자 입력 메소드
    public void showMenu() throws ClassNotFoundException, IOException {
//    	writeList();
    	list = readList();

        while (true) {
            System.out.println("----------------------------------------------------------------------------------");
            System.out.println("1.등록하기  |  2.내용보기  |  3.수정하기  |  4.삭제하기  |  5.저장  |  6.종료  ");
            System.out.println("----------------------------------------------------------------------------------");

            System.out.print("선택: ");
            String selectNo = scanner.nextLine();
            switch (selectNo) {
                case "1":
                    registerBoard();
                    break;
                case "2":
                    showBoard();
                    break;
                case "3":
                    updateBoard();
                    break;
                case "4":
                    delete();
                    break;
                case "5":
                    writeList();
                    break;
                case "6":
                    System.out.println("종료합니다.");
                    return;
            }
        }
    }
    
    
    // 파일에서 이전에 저장된 게시물 리스트를 읽어와서 반환
    public List<Board> readList() throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream("c:/Temp/board.db");
        ObjectInputStream ois = new ObjectInputStream(fis);
        List<Board> list = (List<Board>) ois.readObject();
        ois.close();
        return list;
    }
    
    
    // 1. 등록하기 메서드 
    public void registerBoard() {
    	
    	
		Board board = new Board();
		board.setBno(counter++);

		System.out.print("제목: ");
		board.setTitle(scanner.nextLine());

		System.out.print("내용: ");
		board.setContent(scanner.nextLine());

		System.out.print("글쓴이: ");
		board.setWriter(scanner.nextLine());
		board.setDate(new Date());
		list.add(board);
		
        System.out.println("게시물이 등록되었습니다.");
    }
    
    
    // 2. 내용보기 메서드
    public void showBoard() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		int cnt = 0;
		for (Board board : list) {
			System.out.println(cnt++ + " : " + board.getBno() + "\t" + board.getTitle() + "\t" + board.getContent() + "\t"
					+ board.getWriter() + "\t" + sdf.format(board.getDate()));
		}
	}
    
    
    // 3. 수정하기 메소드
    public void updateBoard() { 
		System.out.print("수정할 자료번호(맨 앞에 있는 것): ");
		int num = Integer.parseInt(scanner.nextLine());
		Board board = new Board();
		System.out.print("일련번호(뒤에 번호): ");
		board.setBno(Integer.parseInt(scanner.nextLine()));

		System.out.print("제목: ");
		board.setTitle(scanner.nextLine());

		System.out.print("내용: ");
		board.setContent(scanner.nextLine());

		System.out.print("글쓴이: ");
		board.setWriter(scanner.nextLine());
		board.setDate(new Date());
		list.set(num, board); // list.set으로 수정 가능

        System.out.println("수정 완료 ");
    }
    
    // 4. 삭제하기 메소드
    public void delete() {
		System.out.print("삭제할 번호(앞에 번호): ");
		list.remove(Integer.parseInt(scanner.nextLine()));// list.remove ( 인덱스 삭제 )
		System.out.println("삭제하였습니다.");
    	}
    
    
    
    // 5. 저장 메소드
    public void writeList() throws IOException {
        FileOutputStream fos = new FileOutputStream("c:/Temp/board.db");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(list);
        oos.flush();
        oos.close();
        System.out.println("저장완료");
    }






   
    
}

 

1. 등록하기

 

2. 내용보기

인덱스 번호 :  counter변수 

 

 

3. 수정하기

인덱스 번호 , counter변수 : 같이 변경할 수 밖에 없음  

ArrayList는 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로

1씩 당겨지기 때문에 ( 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 LinkedList가 좋음 )

 

 

4. 삭제하기

 

삭제할 번호는 인덱스 번호로 지정 ( ArrayList 1씩 당겨지는 기능 때문에 ) 

 

 

5. 저장

 

 

등록, 수정, 삭제시 저장을 누르지 않고 종료하면 데이터가 Data Base File에 적용되지 않음

저장 메소드 내용을 등록하기에 넣을 시 추가 된 값이 덮어씌워짐

 

 

 

 

 

lombok.jar ( 설치, 셋팅 ) 

 

1. 해당 파일 다운로드

lombok.jar
1.89MB

 

 

 

 

2. 명령 프롬프트에서 다운로드한 jar파일 위치로 이동

 

3. 이동한 곳에서 java -jar lombok.jar 입력하면 실행 됨 ( 경고창 뜨면 그냥 OK ) 

 

 

4. eclipse.exe 선택 후 select

 

 

5. 확인 후 install / update

 

 

 

6. Build Path에 적용 Apply 

 

7. eclipse.exe 경로에 생긴 구성설정 메모장으로 열어서 -vmargs 추가하고 저장

 

 

 

8. 이클립스 project에 Clean 후 이클립스 재부팅하면 완료

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-03 32일차  (0) 2023.07.03
2023-06-30 31일차  (0) 2023.06.30
2023-06-28 29일차  (0) 2023.06.28
2023-06-26 27일차  (0) 2023.06.26
2023-06-22 25일차  (0) 2023.06.22

+ Recent posts