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 level, int 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 ui = (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 |