
1. File
1-1. 문자 인코딩(character encoding)이란?
1-2. 스트림이란?
1-3. 자바의 스트림 관련 클래스

1-4. 파일 저장 관련
저장을 위한 빈 파일을 생성하기
-> OutputStream의 객체를 생성한다.
파일에 내용 쓰기
-> 저장할 내용을 byte 배열로 변환
-> 변환된 배열을 OutputStream의 write()메서드에게 파라미터로 전달한다.
파일 닫기
-> OutputStream 객체로 close() 메서드를 호출하여 스트림을 닫는다.
1-5. 파일 저장시 유의사항
OutputStream은 각각의 단계마다 예외처리를 강제적으로 요구한다.
try~catch 블록이 형성되는 과정에서 변수의 유효성 범위에 대한 처리에 유의해야 한다.
package file;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
public class Main01 {
public static void main(String[] args) {
// 저장할 파일의 경로
final String PATH = "./test.txt"; // ./ 는 현재 위치라는 뜻
// 파일에 저장할 내용
String write_string = "테스트 문자열 다시 입력";
// 특정 인코딩 방식을 적용
byte[] buffer = null;
try {
buffer = write_string.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 파일 저장 절차 시작
// 파일 저장을 위한 FileOutputStream은
// 저장된 파일에 대한 경로를 생성자 파라미터로 설정해야 하고
// 부모 형태로 암묵적 형변환 처리한다.
OutputStream out = null;
try {
out = new FileOutputStream(PATH);
// 파일 쓰기
out.write(buffer);
System.out.println("[INFO] 파일 저장 성공 >> " + PATH);
} catch (FileNotFoundException e) {
System.out.println("[ERROR] 지정된 경로를 찾을 수 없음 >> " + PATH);
e.printStackTrace();
} catch (IOException e) {
System.out.println("[ERROR]파일 저장 실패 >> " + PATH);
e.printStackTrace();
} catch(Exception e) {
System.out.println("[ERROR] 알 수 없는 에러" + PATH);
e.printStackTrace();
} finally {
if(out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
1-6. 파일 읽기 과정
파일을 읽기 위한 InputStream 객체를 생성하기
읽은 내용을 담기 위한 빈 byte 배열 생성하기
-> 파일의 요양 크기만큼 배열의 사이즈를 지정해야 한다.
파일의 내용 읽기
-> 읽은 내용을 담기 위한 byte배열을 InputStream 객체의 read() 메서드에게 파라미터로 전달한다.
사용이 완료된 스트림 닫기
-> InputStream 객체의 close() 메서드를 호출하여 스트림을 닫는다.
읽은 내용을 문자열로 변환하기
-> byte배열을 String 클래스의 생성자에게 전달하여 문자열로 변환한다.
-> 이 과정에서 어떤 인코딩을 사용할지를 함께 설정해야 한다.
package file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
public class Main02 {
public static void main(String[] args) {
// 읽을 파일 경로
// final String PATH = "./test.txt";
final String PATH = "K:/test.txt";
// 읽은 내용이 담겨질 스트림
byte[] data = null;
// 읽은 내용이 변환될 문자열
String read_string = null;
InputStream in = null;
// 파일 읽기
try {
in = new FileInputStream(PATH);
// 읽은 내용을 담기 위한 배열은 파일의 용량만큼
// 사이즈를 할당한다.
// in.available()-> 열고 있는 파일의 크기
data = new byte[in.available()];
// 파일 읽기 - 파라미터로 전달된 배열 안에
// 파일의 내용을 담아준다.
in.read(data);
System.out.println("[INFO]파일 읽기 성공 >> " + PATH);
} catch (FileNotFoundException e) {
System.out.println("[ERROR]지정된 경로를 찾을 수 없음 >> " + PATH);
e.printStackTrace();
} catch (IOException e) {
System.out.println("[ERROR]파일 읽기 실패 >> " + PATH);
e.printStackTrace();
}catch(Exception e) {
System.out.println("[ERROR]알 수 없는 에러 >> " + PATH);
e.printStackTrace();
}
finally {
if(in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// data 배열에 내용이 있다면, 문자열로 변환하여 출력
if(data != null) {
try {
read_string = new String(data, "utf-8");
System.out.println(read_string);
} catch (UnsupportedEncodingException e) {
System.out.println("[ERROR]인코딩 지정 에러");
e.printStackTrace();
}
}
}
}