본문 바로가기

JAVA/기본다지기

JAVA 16일차 필기

Input / Output


새로운 패키지 ch17input_output 생성, 새로운 클래스 L01Read.java 생성

package com.javalesson.ch17input_output;


import java.io.IOException;


public class L01Read {

public static void main(String[] args) {

//System.in //콘솔창에서 입력을 받는 것

//System.in.read();//콘솔창에서 입력 받은 것을 읽어오는 것

//read() 하나만 읽을 수 있다. - ??

//->입력 or 출력(Input, Output IO)가 발생할 시 Databus를 지나가기 위해

//데이터를 쪼개고 변형하기 때문이다. 예) 문자열 -> 문자(ASCII code)

System.out.println("13="+((char)13)+"/10"+((char)10)+"종료");

//윈도우의 경우에는 줄구분자로 캐리지리턴(\r)과 라인피드(\n)가 쌍으로 사용됨.

//맥OS9에서는 캐리지리턴이, 맥OSX를 포함한 유닉스는 라인피드가 사용된다.

//13 = 캐리지리턴(Carriage Return) = 커서를 현재 행의 맨 좌측으로 옮기기

//10 = 라인 피드(Line Feed) = 커서를 현재 행의 다음 행으로(enter)

int input;

try{

while((input = System.in.read())!=10){

System.out.println(input);

}

}catch(IOException ex){}

}//main end

}//class end



새로운 클래스 L02ReadLine.java생성

package com.javalesson.ch17input_output;


import java.io.InputStreamReader;

import java.io.BufferedReader;

import java.io.IOException;


public class L02ReadLine {

public static void main(String[] args) {

//try catch 문에서 변수를 생성하지 말것

//Stream -> 직렬화는 버퍼에 임시 저장하기 위해 정렬하는 기술

//Buffer -> 임시 저장

int i=0;

InputStreamReader isr = null;

BufferedReader br null;

try{

isr = new InputStreamReader(System.in);//실제로 입력이 이루어지진 않는다(보조)

br new BufferedReader(isr);

String line ="";

while((line = br.readLine())!=null){//입력이 발생

i++;

System.out.println(i+":"+line);

}

}catch(IOException ex){}

}//main end

}//class end



새로운 클래스 UserInfo.java 생성

package com.javalesson.ch17input_output;


import java.io.Serializable;


public class UserInfo implements Serializable{

//객체의 필드에 정보를 저장하기 위해 만들어진 클래스를 beans 클래스라 부른다.

//beans, bean -> 저장과 관련된 것은 콩에 빗대어 표현한다.

//그래서 개발자들은 필드에 접근할 수 없도록 private로 막는다.

private String id;

private String pw;

private String name;

private String email;

private int level;

private int age;

public UserInfo(String id, String pw, String name, String email, int levelint age){

this.id=id;

this.pw=pw;

this.name=name;

this.email=email;

this.level=level;

this.age=age;

}//생성자 end

public void levelUp(){

++level

}

public void setPw(String pw){

this.pw = pw;

}

public String getPw(){

return pw;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name= name;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public int getLevel() {

return level;

}

public void setLevel(int level) {

this.level = level;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}//class end


새로운 클래스 L03SerialOutput.java 생성

package com.javalesson.ch17input_output;


import java.io.*;

class SaveObject{

String fileName;

FileOutputStream fos;

BufferedOutputStream bos;

ObjectOutputStream oos;


public SaveObject(String fileName) {

this.fileName = fileName;

}

public void saveUser(UserInfo user)throws IOException{

fos = new FileOutputStream(fileName);//파일을 Output해서 fos에 담음

bos = new BufferedOutputStream(fos);//fos를 bos버퍼에 담음

oos new ObjectOutputStream(bos);//bos버퍼에 있는 내용을 Output해서 oos에 담음

oos.writeObject(user);//UserInfo형식으로 쓴다

oos.flush();//버퍼에 남아 있을지도 모를 데이터를 비워준다

                //다 쓴 스트림은 닫기 전에 항상 플러시해야 하며, 그렇지 않을 경우

                //스트림이 닫힐 때 버퍼 안에 남아 있는 데이터가 손실될 수 있다.

oos.close();//스트림을 닫음.

                //장시간 실행중인 프로그램에서 스트림을 닫지 않을 경우, 파일핸들,

                //네트워크 포트 또는 다양한 리소스에서 누수(leak)가 발생할 수 있다.

System.out.println("저장성공");

}

}


public class L03SerialOut {

public static void main(String[] args) {

String folder = "src/com/javalesson/ch17input_output/";

String file = "user.ser";

//저장

SaveObject so new SaveObject(folder+file);

try {

so.saveUser(new UserInfo("AAA","Password","Kim","AAA@mail.com",99,25));

} catch (IOException e) {}

}//main end

}//class end



새로운 클래스 L04SerialInput.java생성

package com.javalesson.ch17input_output;


import java.io.FileInputStream;

import java.io.BufferedInputStream;

import java.io.ObjectInputStream;

import java.io.IOException;

import java.lang.ClassNotFoundException;


class LoadObject{

String fileName;

FileInputStream fis;

BufferedInputStream bis;

ObjectInputStream ois;

public LoadObject(String fileName){

this.fileName=fileName;

}

public UserInfo loadUser() throws IOException, ClassNotFoundException{//void 상태 변경?

fis = new FileInputStream(fileName);//파일을 읽어 들임

bis new BufferedInputStream(fis);//읽어들인 내용을 버퍼에 넣음

ois new ObjectInputStream(bis);//스트림을 이용하여 버퍼를 읽음

UserInfo u= (UserInfo)ois.readObject();//읽은 값을 UserInfo 데이터타입으로 ui변수에 저장

ois.close(); //스트림을 닫아준다. 계속 열어 놓으면 누수(leak)가 발생할 수 있다.

                return ui; //반환

}

}


public class L04SerialInput {

public static void main(String[] args) {

String folder = "src/com/javalesson/ch17input_output/";

String file = "user.ser";

LoadObject lo new LoadObject(folder+folder);//객체생성(매개인자는 파일위치)

                try {

System.out.println("유저 이름은 : "+lo.loadUser().getName());

System.out.println("유저 나이는 : "+lo.loadUser().getAge());

System.out.println("유저 아이디는 : "+lo.loadUser().getId());

System.out.println("유저 레벨은 : "+lo.loadUser().getLevel());

System.out.println("유저 이메일은 : "+lo.loadUser().getEmail());

System.out.println("유저 패스워드는 : "+lo.loadUser().getPw());

                }catch (ClassNowFoundException | IOException e) {

                }

}//main end

}//class end



'JAVA > 기본다지기' 카테고리의 다른 글

JAVA 18일차 필기  (1) 2016.08.31
JAVA 17일차 필기  (1) 2016.08.30
[JAVA] 재미로 만든 로또번호 추첨기  (3) 2016.08.29
JAVA 15일차 필기  (0) 2016.08.26
[JAVA] 간단한 영화관 예약프로그램 예제  (0) 2016.08.25