혼자 공부하는 자바 14장 입출력 스트림 확인 문제

2023. 2. 24. 23:00공부/자바

반응형

 

 
혼자 공부하는 자바
혼자 해도 충분하다! 1:1 과외하듯 배우는 자바 프로그래밍 자습서 (JAVA 8 &11 지원) 이 책은 독학으로 자바를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학습해야 할지 조차 모르는 입문자의 막연한 마음을 살펴, 과외 선생님이 알려주듯 친절하게, 그러나 핵심적인 내용만 콕콕 집어준다. 책의 첫 페이지를 펼쳐서 마지막 페이지를 덮을 때까지, 혼자서도 충분히 자바를 배울 수 있다는 자신감과 확신이 계속될 것이다! 20명의 베타리더 검증으로, ‘함께 만든’ 입문자 맞춤형 도서 20명의 베타리더와 함께 구성하여 입문자에게 맞는 난이도, 분량, 학습 요소 등을 적극 반영했다. 어려운 용어와 개념은 한번 더 풀어 쓰고, 복잡한 설명은 눈에 잘 들어오는 그림으로 풀어 냈다. ‘혼자 공부해본’ 여러 입문자의 초심과 눈높이가 책 곳곳에 반영된 것이 이 책의 가장 큰 장점이다.
저자
신용권
출판
한빛미디어
출판일
2019.06.10

 

<혼자 공부하는 자바> 신용권 저, 한빛 미디어 출판(2019.06.10)

 

※ 직접 풀이한 문제

 

14-1 확인 문제 613p

14-1-1 맞는 것에 O표, 틀린 것에 X표 하세요.

  1. x - 바이트는 InputStream, OutputStream, 문자 기반은 Reader와 Writer 기반으로 사용된다.
  2. o
  3. o
  4. o

14-1-2 맞는 것에 O표, 틀린 것에 X표 하세요.

  1. x - 바이트 기반은 InputStream을 사용한다.
  2. o
  3. o
  4. o

14-1-3 맞는 것에 O표, 틀린 것에 X표 하세요.

  1. o
  2. o
  3. o
  4. x - b에서 데이터가 저장될 길이다.

14-1-4 출력 스트림에서 데이터를 출력한 후 flush() 메소드를 호출하는 이유가 무엇입니까?

  • ① - 출력 스트림의 버퍼에 있는 데이터를 모두 출력하고 버퍼를 비운다.

 

14-2 확인 문제 631p

14-2-1 맞는 것에 O표, 틀린 것에 X표 하세요.

  1. o
  2. o
  3. x - DataInputStream은 객체를 입력하는 보조 스트림이다.
  4. o

14-2-2 각 라인 번호를 추가해 모니터로 출력하는 프로그램을 작성해보세요.

//answer- AddLineNumberExample.java
package sec02.verify.exam02;

import java.io.BufferedReader;
import java.io.FileReader;

public class AddLineNumberExample{
	public static void main(String[] args) throws Exception{
		String filePath="src/sec02/verify/exam02/AddLineNumberExample.java";
		FileReader fr=new FileReader(filePath);
		BufferedReader br=new BufferedReader(fr);
		int line=1;
		while(true) {
			String data=br.readLine();
			if(data==null) break;
			System.out.println(line++ +": "+ data);
		}
		br.close();
	}
}

 

14-3 확인 문제 643p

 

14-3-1 이 문제는 정답 없이 독자 여러분이 직접 개발해보는 작은 프로젝트입니다. 이 책을 학습하고 나서 뭔가를 만들고 싶다는 생각이 든다면, 아래의 메뉴를 가지고 있는 콘솔 게시판을 만들어보세요. 어떤 경우라도 예외가 발생되어 프로그램이 종료되지 않도록 예외 처리에 만전을 기하기 바랍니다. 추가적인 기능이 필요하다면 여러분의 아이디어와 결합해보세요.

//answer - Board.java
package sec03.verify.exam01;
public class Board implements Serializable{
	private int bno;
	private String title;
	private String content;
	private String writer;
	private Date date;
	public Board(int bno, String title, String content, String writer, Date date) {
		super();
		this.bno = bno;
		this.title = title;
		this.content = content;
		this.writer = writer;
		this.date = date;
	}
	public int getBno() {return bno;}
	public void setBno(int bno) {this.bno = bno;}
	public String getTitle() {return title;}
	public void setTitle(String title) {this.title = title;}
	public String getContent() {return content;}
	public void setContent(String content) {this.content = content;}
	public String getWriter() {return writer;}
	public void setWriter(String writer) {this.writer = writer;}
	public Date getDate() {return date;}
	public void setDate(Date date) {this.date = date;}
}
//answer - BoardService.java
package sec03.verify.exam01;

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.List;
import java.util.Scanner;

public class BoardService{
	private List<Board> list=new ArrayList<>();
	private Scanner scanner=new Scanner(System.in);
	private int counter;

	public BoardService(){
		

	}

	public void showMenu() {
		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":showList();break;
			case "2":showDetail();break;
			case "3":modifyBoard();break;
			case "4":deleteBoard();break;
			case "5":saveFile();break;
			case "6":return;
			default: System.out.println("잘못된 선택입니다. 다시 선택해주세요.");
			}
		}
	}
	public void showList() {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd a hh:mm");
		for(Board b : list) {
			System.out.println(b.getBno()+"\\t"+b.getTitle()+"\\t"+b.getWriter()+"\\t"+sdf.format(b.getDate()));
		}
	}
	public void showDetail() {
		//search
		int index=searchIndex();
		if(index==-1){
			System.out.println("해당하는 글이 없습니다.");
			return;
		}

		//show detail
		Board target=list.get(index);
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd a hh:mm");
		System.out.println("글번호: "+target.getBno());
		System.out.println("글제목: "+target.getTitle());
		System.out.println("글내용: "+target.getContent());
		System.out.println("글쓴이: "+target.getWriter());
		System.out.println("게시일: "+sdf.format(target.getDate()));
	}
	public void modifyBoard() {
		//search
		int index=searchIndex();
		if(index==-1){
			System.out.println("해당하는 글이 없습니다.");
			return;
		}

		//show detail
		Board target=list.get(index);
		System.out.print("글제목> ");
		target.setTitle(scanner.nextLine());
		System.out.print("글내용> ");
		target.setTitle(scanner.nextLine());
	}
	public void deleteBoard() {
		//search
		int index=searchIndex();
		if(index==-1){
			System.out.println("해당하는 글이 없습니다.");
			return;
		}

		//show detail
		list.remove(index);
	}
	public void saveFile() {
		try {
			FileOutputStream fos=new FileOutputStream("C:/Temp/board.db");
			ObjectOutputStream oos=new ObjectOutputStream(fos);
			oos.writeObject(list);
			oos.flush();
			oos.close();
			System.out.println("저장 완료.");
		}catch(IOException e) {
			System.out.println("error 발생: "+e.getMessage());
		}
	}

	
	public void loadFile() {
		try {
			FileInputStream fis=new FileInputStream ("C:/Temp/board.db");
			ObjectInputStream ois=new ObjectInputStream (fis);
			list=(List<Board>) ois.readObject();
			ois.close();
		}catch(IOException e) {
			System.out.println("error 발생: "+e.getMessage());
		}catch(ClassNotFoundException e) {
			System.out.println("error 발생: "+e.getMessage());
		}
	}

	public int searchIndex(){
		int result=-1;
		System.out.print("글번호> ");
		Scanner scanner=new Scanner(System.in);
		int targetNo=Integer.parseInt(scanner.nextLine());
		for(Board b : list) {
			if(b.getBno()==targetNo){
				result=targetNo;
			}
		}
		return result;
	}
}
//answer - BoardServiceExample.java
package sec03.verify.exam01;

public class BoardServiceExample{
	public static void main(String[] args){
		BoardService bs=new BoardService();
		bs.showMenu();
	}
}
반응형