자바 RandomAccessFile 예제
Java RandomAccessFile은 데이터를 읽고 파일에 쓰는 기능을 제공합니다. RandomAccessFile은 파일 시스템에 저장된 큰 바이트 배열과 파일 포인터 위치를 이동할 수 있는 커서로 파일과 함께 작동합니다.
자바 RandomAccessFile
Java RandomAccessFile 읽기 예제
Java에서 RandomAccessFile을 사용하여 파일에서 바이트 배열을 읽을 수 있습니다. 아래는 RandomAccessFile을 사용하여 파일을 읽는 의사 코드입니다.
RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
raf.seek(1);
byte[] bytes = new byte[5];
raf.read(bytes);
raf.close();
System.out.println(new String(bytes));
첫 번째 줄에서는 읽기 전용 모드에서 파일에 대한 RandomAccessFile 인스턴스를 생성합니다. 그런 다음 두 번째 줄에서 파일 포인터를 인덱스 1로 이동합니다. 길이가 5인 바이트 배열을 만들었으므로 read(bytes) 메서드를 호출할 때 파일에서 바이트 배열로 5바이트를 읽습니다. 마지막으로 RandomAccessFile 리소스를 닫고 바이트 배열을 콘솔에 출력합니다.
Java RandomAccessFile 쓰기 예제
다음은 Java에서 RandomAccessFile을 사용하여 파일에 데이터를 쓰는 방법을 보여주는 간단한 예입니다.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(5);
raf.write("Data".getBytes());
raf.close();
RandomAccessFile은 파일을 바이트 배열로 취급하기 때문에 쓰기 작업은 파일에 추가할 수 있을 뿐만 아니라 데이터를 재정의할 수 있습니다. 그것은 모두 파일 포인터 위치에 따라 다릅니다. 포인터가 파일 길이 이상으로 이동한 다음 쓰기 작업이 호출되면 파일에 정크 데이터가 기록됩니다. 따라서 쓰기 작업을 사용하는 동안 이를 처리해야 합니다.
RandomAccessFile 추가 예
우리가 필요한 것은 파일 포인터가 파일에 추가할 파일 끝에 있는지 확인하는 것입니다. 다음은 RandomAccessFile을 사용하여 파일에 추가하는 코드입니다.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(raf.length());
raf.write("Data".getBytes());
raf.close();
자바 RandomAccessFile 예제
다음은 읽기 및 쓰기 작업이 다른 완전한 Java RandomAccessFile 예제입니다.
package com.journaldev.files;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileExample {
public static void main(String[] args) {
try {
// file content is "ABCDEFGH"
String filePath = "/Users/pankaj/Downloads/source.txt";
System.out.println(new String(readCharsFromFile(filePath, 1, 5)));
writeData(filePath, "Data", 5);
//now file content is "ABCDEData"
appendData(filePath, "pankaj");
//now file content is "ABCDEDatapankaj"
} catch (IOException e) {
e.printStackTrace();
}
}
private static void appendData(String filePath, String data) throws IOException {
RandomAccessFile raFile = new RandomAccessFile(filePath, "rw");
raFile.seek(raFile.length());
System.out.println("current pointer = "+raFile.getFilePointer());
raFile.write(data.getBytes());
raFile.close();
}
private static void writeData(String filePath, String data, int seek) throws IOException {
RandomAccessFile file = new RandomAccessFile(filePath, "rw");
file.seek(seek);
file.write(data.getBytes());
file.close();
}
private static byte[] readCharsFromFile(String filePath, int seek, int chars) throws IOException {
RandomAccessFile file = new RandomAccessFile(filePath, "r");
file.seek(seek);
byte[] bytes = new byte[chars];
file.read(bytes);
file.close();
return bytes;
}
}
이것이 Java의 RandomAccessFile에 대한 전부입니다.