# 파일저장
public class DataOutputTest2 {
public static void main(String[] args) throws Exception {
// 1. 파일로 저장
FileOutputStream fos = new FileOutputStream("c:\\webtest\\readme6.txt");
// 2. 자바에 자료형에 맞게 포장해서 -> DataOutputStream(출력용)
DataOutputStream dos = new DataOutputStream(fos);
// 3. 메모리 -> 자료형에 맞게 파일에 저장
char han = '한'; // 0 ~ 65535
System.out.println((int)han); // 54620 유니코드
byte b = 21; // "21"
String str = "bg\n";
byte ba[] = {65, 66, 67}; // A, B, C 의 아스키코드
// 파일로 저장
// 형식) write 자료형(저장할 값) <-> read 자료형()
dos.writeChar(han);
dos.writeByte(b);
dos.writeBytes(str); // writeString(X)
dos.write(ba); // 배열의 값을 매개변수로 저장 -> A, B, C
dos.close();
fos.close();
//==============추가=================
// 만들어진 파일의 내용을 다시 읽어들여서 확인 후 출력
DataInputStream dis = new DataInputStream(new FileInputStream("c:\\webtest\\readme6.txt"));
// 변수 = dis.read 자료형 <-> dos.write 자료형(저장할 값)
char c = dis.readChar(); // '한'
byte b1 = dis.readByte(); // byte = 21;
String s = dis.readLine(); // readString(X)
// 앞으로 사라질거니 사용 안하는걸 추천
byte bb[] = new byte[3]; // 65, 66, 67
// byte bb[] = {65, 66, 67} -> String(A, B, C)로 출력 예정
dis.read(bb); // 파일에 저장된 byte값을 배열로 bb에 저장
System.out.println("c : " + c);
System.out.println("b1 : " + b1);
System.out.println("s : " + s);
/*
for (int i = 0; i < bb.length; i++) {
System.out.print(bb[i] + " ");
}
*/
for (byte b2:bb) {
System.out.print((char)b2);
System.out.print(b2 + "\t");
}
System.out.println("\n===================================");
String str2 = new String(bb);
System.out.println("str2 : " +str2);
byte t[] = str2.getBytes(); // t[] = {65, 66, 67}
for (byte b3:t) {
System.out.print((char)b3);
}
// byte[] -> String 변환
// String -> byte[]로 변환
}
}
# 파일저장 (2)
// 외부의 파일(txt, img, 동영상, 실행파일(exe)) -> FileInputStream
// <-> FileReader(한글문서)
public class FileInputTest {
public static void main(String[] args) throws Exception {
// 자바는 \ 인식 못하기 때문에 \\ or / 로 변경 해야됨
FileInputStream fis = new FileInputStream("C:\\webtest\\readme.txt");
// 파일의 내용을 저장할 변수
int read = 0;
// 파일이 계속해서 읽어들일 수 있는 상태라면
/*
while(read != -1) {
read = fis.read(); // = System.in.read() 대신에 사용
System.out.write(read); // 콘솔에 파일의 내용을 변환해서 출력
}
*/
while(true) {
read = fis.read();
if(read == -1) break; // 파일의 끝에 도달하면 더이상 출력X
System.out.write(read);
}
fis.close();
}
}
# 파일저장 (3)
// 외부의 파일(txt, img, 동영상, 실행파일(exe)) -> FileInputStream
// <-> FileReader(한글문서)
import java.io.*; // 예외처리 미리
public class FileInputTest2 {
public static void main(String[] args) throws Exception {
// 자바는 \ 인식 못하기 때문에 \\ or / 로 변경 해야됨
FileInputStream fis = new FileInputStream("C:\\webtest\\readme.txt");
// 파일의 내용을 저장할 변수
int read = 0;
/* 1번째
FileOutputStream fos = new FileOutputStream("C:\\webtest\\readme1.txt");
*/
/* 2번째 - 파일객체를 이용(생성자의 매개변수로 전달해서 작성)
File f = new File("C:\\webtest\\readme2.txt");
FileOutputStream fos = new FileOutputStream(f);
*/
// 3번째 - 다단계 결합
FileOutputStream fos = new FileOutputStream(new File("C:\\webtest\\readme3.txt")); // 익명객체
while(true) {
read = fis.read();
if(read == -1) break; // 파일의 끝에 도달하면 더이상 출력X
fos.write(read);
//System.out.write(read);
}
}
}
# BuffuerdReader
public class FilterTest {
public static void main(String[] args) throws IOException {
// System.in 은 InputStream 의 객체(멤버변수)다
// System.out -> PrintStream 의 객체(표준출력객체)다
// 키보드로 데이터를 읽어들일 때 한글이 깨지지 않도록 많은양의 데이터를 읽어들임
// 한 줄 로 표현하면 Scanner sc = new Scanner();
/*
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 익명객체를 통해 넣을 수 있음
String name;
int kor, eng, total;
System.out.println("이름은");
name = br.readLine(); // name = sc.next();
System.out.println("국어 점수는");
kor = Integer.parseInt(br.readLine()); // kor = sc.nextInt();
// kor = Double.parseDouble(br.readLine()); "56.9" -> 56.9
System.out.println("영어 점수는");
eng = Integer.parseInt(br.readLine()); // eng = sc.nextInt();
total = kor + eng;
System.out.println("이름 : " + name + ", 총점 : " + total);
}
}
# BuffuerdReader (2)
/*
* 키보드로 값을 입력 받아서 한글 데이터 출력
* ex) 이름, 국어점수, 영어점수 -> 입력 -> 이름 : 홍길동, 총점 : 180점
*/
import java.io.*;
public class Sawon {
public static void main(String[] args) throws Exception {
// 이름, 사번, 암호, 성별, 나이, 전화번호
String mem_name, mem_id, mem_pwd;
String mem_gender, mem_age, mem_phone;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 익명객체를 통해 넣을 수 있음
// 추가(한글데이터 저장)
File f = new File("C:\\webtest\\readme5.txt");
FileWriter fw = new FileWriter(f, true); // true 때문에 중첩 가능
System.out.println("====회원 정보 입력하기====");
System.out.println("이름은");
mem_name = br.readLine();
System.out.println("ID는");
mem_id = br.readLine();
System.out.println("비밀번호는");
mem_pwd = br.readLine();
System.out.println("성별은");
mem_gender = br.readLine();
System.out.println("나이는");
mem_age = br.readLine();
System.out.println("전화번호는");
mem_phone = br.readLine();
// 파일에 저장
fw.write(mem_name); fw.write("\r\n"); // 1310 줄 바꿈
fw.write(mem_id); fw.write("\r\n"); // 1310 줄 바꿈
fw.write(mem_pwd); fw.write("\r\n"); // 1310 줄 바꿈
fw.write(mem_gender); fw.write("\r\n"); // 1310 줄 바꿈
fw.write(mem_age); fw.write("\r\n"); // 1310 줄 바꿈
fw.write(mem_phone); fw.write("\r\n"); // 1310 줄 바꿈
fw.write("\r\n");
fw.close(); // 메모리 해제
br.close();
}
}
# 객체직렬화
* 조건) String -> 각각 자료형에 맞게 저장(DataOutputStream) -> 객체를 파일로 저장
* -> usb or Email로 전송(파일 첨부 기능)
* -> 직렬화 -> 메모리(객체) -> ObjectOutputStream(객체포장) -> 파일저장
* -> ex) 냉장고에 저장(냉동실) <-> 역직렬화(해동)
* 모든 클래스의 객체가 전부 파일로 저장되지는 않는다. -> 객체직렬화가 가능한 클래스로 만들어줘야 된다.
*
* 형식 ) class 클래스명 implements Serializable;
* Marker interface계열(기능 부여)
*/
import java.io.*;
class Person implements Serializable {
String name;
transient int age;
transient String address;
}
public class ObjectTest { // 객체직렬화가 되는 기능부여
public static void main(String[] args) throws Exception{
Person p = new Person();
p.name = "홍길동";
p.age = 30;
p.address = "경기도 성남시";
// 1. 파일로 저장
FileOutputStream fos = new FileOutputStream("c:\\webtest\\readme7.txt");
// 2. 객체로 저장
ObjectOutputStream oos = new ObjectOutputStream(fos);
// 3. 저장시키는 형식 -> writeObject(저장할 객체명) = 직렬화
// <->(원래 저장된 형)readObject(); = 역직렬화
oos.writeObject(p);
oos.close();
fos.close();
// 4. 역직렬화 : 만들어진 파일의 내용을 다시 메모리상으로 로딩
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c:\\webtest\\readme7.txt"));
// Object(객체형변환) -> readObject -> Person으로 형변환 시켜야됨
Person p2 = (Person)ois.readObject(); // 저장된건 Object 이기 때문에 Person형으로 형변환 시켜야됨
System.out.println("p2 : " + p2);
System.out.println("p1 : " + p);
// 파일로 저장 -> 다시 불러오기 -> 주소가 다를수 밖에 없다.
System.out.println("p2 == p1 ? : " + (p2 == p));
System.out.println("p2 이름 : " + p2.name);
System.out.println("p2 나이 : " + p2.age);
System.out.println("p2 주소 : " + p2.address);
System.out.println("========================");
System.out.println("p1 이름 : " + p.name);
System.out.println("p1 나이 : " + p.age);
System.out.println("p1 주소 : " + p.address);
}
}
# 예외처리
import java.io.*; // 1. 입출력에 대한 클래스 불러오기
// 2. 반드시 예외처리를 필수
// 3. flush() 호출 -> 버퍼에 저장된 내용이 바로 출력O
// 입출력의 개념파악
public class WriteHello {
public static void main(String[] args) {
byte hello[] = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 10}; // 아스키코드값
byte a = 72; // byte는 입출력할 때 데이터를 전송할 때 필요로 하는 자료형
// char (나) -> byte -> char (상대방)
try {
System.out.println(a); // = System.out.printla((char)a); = write(a);
System.out.println("hello : " + hello);
System.out.write(a); // 'H'
System.out.flush(); // 버퍼에 저장된 데이터를 바로바로 전송함
System.out.write(hello); // 많은 데이터를 전송할땐 반드시 예외처리를 해야됨
} catch (IOException e) {
System.out.println(e); // e.toString()
System.out.println("출력시 에러 유발됨");
}
}
}
'국비학원 > 공부' 카테고리의 다른 글
24일차 java(12) (0) | 2023.07.03 |
---|---|
23일차 java(11) (0) | 2023.07.03 |
21일차 java(9) (0) | 2023.07.03 |
20일차 java(8) (0) | 2023.07.02 |
19일차 java(7) (0) | 2023.07.02 |