파일의 개념을 추상화한 클래스이며 파일 입출력 기능은 없고, 파일의 이름, 경로, 읽기 전용 등의 속성을 알 수 있다.
다양한 method들이 존재한다.
public class FileTest {
public static void main(String[] args) throws IOException {
File file = new File("D:\\JAVA_LAB\\Chapter6\\newFile.txt");
file.createNewFile();
System.out.println("isFile(): "+file.isFile());
System.out.println("isDirectory(): "+ file.isDirectory());
System.out.println("getName(): "+ file.getName());
System.out.println("getAbsolutePath(): "+ file.getAbsolutePath());
System.out.println("getPath(): "+ file.getPath());
System.out.println("canRead(): "+ file.canRead());
System.out.println("canWrite(): "+ file.canWrite());
file.delete();
}
}
Result
isFile(): true
isDirectory(): false
getName(): newFile.txt
getAbsolutePath(): C:\eclipse-workspace\Chapter6\newFile.txt
getPath(): newFile.txt
canRead(): true
canWrite(): true
대부분의 입출력 스트림들은 파일에 순차적으로 입출력 작업을 수행한다.
RandomAccessFile class는 입출력 클래스 중 유일하게 파일에 대한 입력과 출력을 동시에 할 수 있는 클래스이다.
RandomAccessFile 클래스는 파일만을 대상으로한다.
파일 포인터가 있어서 읽고 쓰는 위치의 이동이 가능하다. (seek 메소드를 활용)
순차적인 접근이 아닌 임의의 지접에 접근하여 작업을 수행하고 싶다면 사용하기 좋다.
RandomAccessFile 클래스의 생성자에는 인수로 파일의 이름뿐만 아니라 파일 모드까지 함께 전달해야한다.
파일 모드 종류
public class RandomAccessFileTest {
public static void main(String[] args) throws IOException {
RandomAccessFile rf = new RandomAccessFile("random.txt", "rw");
rf.writeInt(100);
System.out.println("파일 포인터 위치:" + rf.getFilePointer());
rf.writeDouble(3.14);
System.out.println("파일 포인터 위치:" + rf.getFilePointer());
rf.writeUTF("안녕하세요");
System.out.println("파일 포인터 위치:" + rf.getFilePointer());
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);
}
}
Result
파일 포인터 위치:4
파일 포인터 위치:12
파일 포인터 위치:29
파일 포인터 위치:0
파일 포인터 위치:29
100
3.14
안녕하세요