입출력 스트림 사용_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 |