File 클래스
는 파일 또는 폴더에 대한 정보를 제공하는 클래스이다.
- File 클래스의 객체는 정보를 조회하고자 하는 파일이나 폴더의 경로에 대한 문자열을 생성자 파라미터로 전달하는 형태로 만들 수 있다.
- 이때 파라미터로 전달되는 경로가 실제로 존재하지 않더라도 File 객체의 생성이 가능하다.
File file = new File("C:/photo/food.jpg");
File file = new File("C:/photo", "food.jpg");
- 운영체제 간의 호환성 유지를 위한 "/"의 사용
- 경로 문자열을 설정할 때 윈도우 기반에서는
역슬래시(\)
를 사용하지만, 이 경우 이스케이프 문자를 사용하여\\
의 형식으로 사용해야하고 운영체제 호환성을 위해 가급적(/)를 사용하는 것이 좋다.📌 윈도우에서만 사용할 것이라면
\
를 사용하는게 문제가 되지 않지만 그렇지 않은 경우가 더 많기 때문에 가급적 '/'를 사용할 것을 추천!
절대 경로
✔️ 작업 디렉토리와 관계없이 절대적인 위치를 의미하는 경로 - 윈도우 : C:/Windows/System32/drivers/etc/hosts - 리눅스 : /etc/httpd/conf/httpd.conf
상대 경로
✔️ 작업 디렉토리를 기준으로 상대적인 위치를 의미하는 경로 - 윈도우 : ../drivers/etc/hosts(ex.mde) ./drivers/etc/hosts(ex.System32) - 리눅스 : ./conf/httpd.conf
character encoding
- 문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법
- UTF-8 : 8비트 이진수로 표현하는 방법
- 아스키 (ASCII) : 라틴 알파벳, 숫자, 특수문자 등을 정수와 그에 대응하는 7비트 이진수로 표현
- 입출력에서
stream
이란 디바이스의 입출력 방식이 character 단위이든 block 단위이든 관계없이 "1바이트"씩 "연속"적으로 전달되는 형태로, 추상화된 상태를 의미한다.
- 입출력 장치는 개별적인 특성이 있으므로 읽고 쓰는 단위가 각각 다르지만, 스트림은 이러한 일련의 과정을 추상화하여 모든 디바이스를 character 단위로만 사용하고 있다.
- 즉, 입출력 디바이스의 특성을 무시하고 하나의 단일한 입출력 인터페이스로 다룰 수 있도록 하는 것이 stream이다.
- 스트림 관련 클래스들은 각각 InputStream(입력/읽기), OutputStream(출력/저장)과 관련된 인터페이스를 상속 받기 때문에 모두 동일한 메서드를 가지고 있다.
- 프로그래머는 상황에 따라 적절한 클래스를 사용하기만 하면 동일한 방법으로 스트림을 사용할 수 있다.
저장을 위한 빈 파일을 생성하기
OutputStream의 객체를 생성한다.
파일에 내용 쓰기
저장할 내용을 byte 배열로 변환한다. 변환된 배열을 OutputStream의 write() 메서드에게 파라미터로 전달한다.
파일 닫기
OutputStream 객체로 close() 메서드를 호출하여 스트림을 닫는다.
유의사항
OutputStream은 각각의 단계마다 예외처리를 강제적으로 요구한다. try ~ catch 블록이 형성되는 과정에서 변수의 유효성 범위에 대한 처리에 유의해야 한다.
- 파일을 읽기 위한 InputStream 객체 생성하기
읽은 내용을 담기 위한 빈 byte 배열 생성하기
파일의 용량 크기 만큼 배열의 사이즈를 지정해야 한다.
파일의 내용 읽기
읽은 내용을 담기 위한 byte 배열을 InputStream 객체의 read() 메서드에게 파라미터로 전달한다.
사용이 완료된 스트림 닫기
InputStream 객체의 cload() 메서드를 호출하여 스트림을 닫는다.
읽은 내용을 문자열로 변환하기
byte 배열을 String 클래스의 생성자에게 전달하여 문자열로 변환하기 이 과정에서 어떤 인코딩을 사용할지를 함께 설정해야 한다.
🔍 './'는 현재 위치를 뜻함 (입력하지 않고 생략 가능)