26장 - 파일에 있는 것을 읽고 쓰려면 아이오를 알아야죠
I/O 역할
- 파일 읽거나 저장할 때
- 다른 서버나 디바이스로 보낼 때
I/O
I = Input / O = Output
입력과 출력 통칭하는 용어
JVM을 기준으로 읽을 때 Input / 파일로 쓰거나 외부로 전송 시 Output 용어 사용
여기서의 Input과 Output : JVM 기준임을 꼭 기억해두기
초기 I/O | JDK 1.4 ~ | Java 7 ~ |
java.io 패키지에 있는 클래스만 제공 바이트 기반의 데이터 처리 위해 여러 종류의 스트림(Stream) 클래스 제공 읽기 = InputStream / 쓰기 = OutputStream 자바의 스트림 = 끊기지 않는 연속적인 데이터 바이트 아닌 char 기반 문자열로만 된 파일 작업 시 Reader / Writer 클래스 사용 |
보다 빠른 I/O 처리 위해 NIO (New I/O) 추가됨 스트림 기반이 아닌 버퍼(Buffer)와 채널(Channel) 기반으로 데이터 처리 |
NIO2 추가됨 |
자바의 File과 Files 클래스
File 클래스 | Files 클래스 |
java.io 패키지 파일 뿐만 아니라 파일 경로(path) 정보도 포함 정체가 불분명하고, 심볼릭 링크(symbolic ink)와 같은 유닉스 계열의 파일에서 사용하는 몇 기능 제대로 제공 못함 |
Java 7 ~ NIO2 등장 java.nio.file 패키지 File 클래스의 메서드 대체하여 제공 |
객체 생성해서 데이터 처리 | 모든 메서드가 static으로 선언됨 ➡ 별도의 객체 생성 필요 x |
File 클래스
파일 및 경로 정보 통제하기 위한 클래스
File 클래스로 생성한 파일 객체가 가리키고 있는 것이
- 존재하는지
- 파일인지 경로인지
- 읽거나 쓰거나 실행할 수 있는지
- 언제 수정되었는지
확인하는 기능과 해당 파일의
- 이름 변경
- 삭제
- 생성
- 전체 경로 확인
등 기능 제공
이외에 File 객체가 가리키는 것이 파일이 아닌 경로일 때 해당 경로에 있는
- 파일의 목록 가져오거나
- 경로 생성하고
- 경로 삭제하는
등의 기능도 있음
File 클래스의 생성자
생성자 | 설명 |
File(File parent, String child) | 이미 생성된 File 객체(parent)와 그 경로의 하위 경로 이름으로 새로운 File 객체 생성 child: 값의 경로 or 파일 이름 |
File(String pathname) | 지정한 경로 이름으로 File 객체 생성 전체 경로와 파일 이름이 pathname으로 지정된 경우 파일을 가리키는 File 객체가 됨 |
File(String parent, String child) | 상위 경로(parent)와 하위 경로(child)로 File 객체 생성 child: 값의 경로 or 파일 이름 |
File(URI uri) | URI에 따른 File 객체 생성 |
URI (Uniform Resource Identifier)
어떤 리소스 가리키기 위한 경로
File 클래스로 파일 경로 및 상태 확인
package e.io;
import java.io.File;
public class FileSample {
public static void main(String[] args) {
FileSample sample = new FileSample();
String pathName = "C:\\godofjava\\text";
sample.checkPath(pathName);
}
public void checkPath(String pathName) {
File file = new File(pathName);
System.out.println(pathName + " exists? = " + file.exists());
}
}
//결과 : C:\\godofjava\\text exists? = false
//해당 디렉터리 존재하지 않으므로 false
존재하지 않는 디렉터리를 File 클래스로 만들려면 mkdir() / mkdirs() 사용
mkdir()
디렉터리 하나 생성
mkdirs()
여러 개의 하위 디렉터리 생성
C:\godofjava\text1\text2
//위의 경로 만들려면
mkdirs()
//text1, test2 디렉터리 생성
mkdir()
//디렉터리를 하위 디렉터리 하나만 만들기에 해당 경로의 디렉터리 생성되지 x
public void makeDir(String pathName) {
File file = new File(pathName);
System.out.println("Make " + pathName + " result = " + file.mkdir());
}
Escape character
String 안에 역슬래시 한 번만 쓰면 그 뒤에 있는 단어에 따라 미리 약속한 특수 기호로 인식
➡ 역슬래시 나타내려면 \\ 사용해야 함
ex) tab = \t, 다음줄 = \n
OS마다 각 디렉터리 구분 기호 다름
유닉스 계열 : /로 디렉터리 구분
➡ 이런 모호함 없애기 위해 File 클래스에 separator이라는 static 변수 존재
String pathName = File.separator + "godofjava" + File.separator + "text";
isDirectory() | isFile() | isHidden() |
File 객체를 매개 변수로 받을 때 해당 객체가 파일인지 경로인지 알 수 있음 | 파일인지 확인 시 | 숨긴 파일인지 확인 시 |
public void checkFileMethods(String pathName) {
File file = new File(pathName);
System.out.println(pathName + " is directory? = " + file.isDirectory());
System.out.println(pathName + " is file? = " + file.isFile());
System.out.println(pathName + " is hidden? = " + file.isHidden());
}
canRead() | canWrite() | canExecute() |
현재 수행하고 있는 자바 프로그램이 해당 File 객체를 읽거나 | 쓰거나 | 실행할 수 있는 권한이 있는지 확인 Java 6 ~ |
public void canFileMethods(String pathName) {
File file = new File(pathName);
System.out.println(pathName + " can read? = " + file.canRead());
System.out.println(pathName + " can write? = " + file.canWrite());
System.out.println(pathName + " can execute? = " + file.canExecute());
}
lastModified() |
파일이나 경로가 언제 생성되었는지 확인 long 타입의 현재 시간을 리턴하기에 java.util 패키지의 Date 클래스 사용해 시간 확인 |
public void lastModified(String pathName) {
File file = new File(pathName);
System.out.println(pathName + " last modified = " + new Date(file.lastModified()));
}
delete() |
파일 삭제 / 정상적으로 파일 삭제 후 true 리턴 |
p.711 ~
'Backend > Java' 카테고리의 다른 글
[자바의 신] 28장 (ongoing) (0) | 2022.08.31 |
---|---|
[자바의 신] 27장 (ongoing) (0) | 2022.08.18 |
[자바의 신] 25장 (ongoing) (0) | 2022.08.18 |
[자바의 신] 24장 (0) | 2022.08.09 |
[자바의 신] 23장 (0) | 2022.08.09 |
댓글