컴퓨터공학 💻 도서관📚
Part2. 6-18 그 외 여러가지 입출력 클래스들 본문
6-17 까지가 Stream 클래스였다.
C언어는 읽고 쓸 때 파일이라는 데이터 자료형을 사용한다.
자바에도 파일이라는 클래스가 있는데 이 클래스에는 읽고 쓰는 기능이 없다.
이 클래스는 파일의 속성을 알 수 있는 클래스이다.
File 클래스
- 파일 개념을 추상화한 클래스
- 입출력 기능은 없고, 파일의 이름, 경로, 읽기 전용 등의 속성을 알 수 있음
- 이를 지원하는 여러 메서드들이 제공됨
- 파일을 new 할 때 파일은 없어도 경로(디렉토리)는 있어야 한다. (밑에 코드에서는 D:\\JAVA_LAB\\Chapter6\\ 부분)
- createNewFile() 메서드를 호출해야 파일이 생성이 된다.
import java.io.File;
public class FileTest {
public static void main(String[] args) throws IOException {
File file = new File("D:\\JAVA_LAB\\Chapter6\\newFile.txt"); // 스트링으로 만든다
file.createNewFile(); // craeteNewFile() 메서드를 호출하면 파일이 생성이 된다.
System.out.println(file.isFile()); // 파일인가?
System.out.println(file.isDirectory()); // 디렉토리인가?
System.out.println(file.getName()); // 이름이 뭔가 자네?
System.out.println(file.getAbsolutePath());
System.out.println(file.getPath());
System.out.println(file.canRead());
System.out.println(file.canWrite());
file.delete(); // 파일 지우기
}
}
RandomAccessFile 클래스
- 입출력 클래스 중 유일하게 파일에 대한 입력과 출력을 동시에 할 수 있는 클래스 (Stream 은 아니다.)
- 파일 포인터가 있어서 읽고 쓰는 위치의 이동이 가능함 (파일 포인터가 LP판의 돌아가는 바늘처럼 파일 디스크를 돌아가면서 어디까지 읽었는지 가리킨다.)
- 다양한 메서드가 제공됨
- seek() 메서드를 이용하면 파일 포인터의 위치를 이동할 수 있다.
import java.io.RandomAccessFile;
public class RandomAccessFileTest {
public static void main(String[] args) throws IOException { // 예외 throw 함
RandomAccessFile rf = new RandomAccessFile("random.txt", "rw");
rf.writeInt(100);
System.out.println("파일 포인터 위치:" + rf.getFilePointer()); // 5번 줄에서 int를 썼으니까 파일 포인터의 위치는 4
rf.writeDouble(3.14);
System.out.println("파일 포인터 위치:" + rf.getFilePointer()); // 7번 줄에서 double을 썼으니까 파일 포인터의 위치는 12(4+8)
rf.writeUTF("안녕하세요");
System.out.println("파일 포인터 위치:" + rf.getFilePointer());
// 12번 줄에서 한글을 썼는데 자바는 UTF-8을 써서 한글은 3바이트이고,
// 문자열은 맨 마지막에 null문자가 들어가서 null 문자는 2바이트이니까 29(12 + 15 + 2)
rf.seek(0); // 파일 포인터를 맨 앞으로 이동
System.out.println("파일 포인터 위치:" + rf.getFilePointer());
int i = rf.readInt();
double d = rf.readDouble();
String str = rf.readUTF();
System.out.println("파일 포인터 위치:" + rf.getFilePointer());
System.out.println(i);
System.out.println(d);
System.out.println(str);
}
}
17번 줄에서 rf.seek(0) 을 안하면
20번 줄에서 rf.readInt() 에서 오류가 난다.
파일 포인터가 돌아가는데
지금 위 코드에서 rf.seek(0)을 안하면
위치가 29까지 write 를 해서 그 다음부터는 write 한게 없는데
read를 하라고 하는 것이기 때문에
파일 포인터의 위치를 다시 0으로 옮긴 다음에 0 부터 read를 하라고 명령해야 한다.
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
| Part2. 6-17 직렬화 (serialization) (보조스트림 활용) (0) | 2025.09.06 |
|---|---|
| Part2. 6-16 여러가지 보조 스트림 클래스들 (0) | 2025.08.31 |
| Part2. 6-15 문자 단위 입출력 스트림 (1) | 2025.08.29 |
| Part2. 6-14 바이트 단위 입출력 스트림 (0) | 2025.08.22 |
| Part2. 6-13 표준 입출력 스트림 (0) | 2025.08.22 |
Comments