파일처리(한번에 모두읽기, 라인단위로 읽기, 쓰기, 리스트처리, 특정길이만큼 읽기)

텍스트 파일 한 번에 모두 읽기 (Utility 타입)

 대용량 파일일 때는 메모리가 부족할 수 있으므로 '텍스트 파일 라인 단위로 읽어서 처리' 방식을 사용

public static String read(String filePath) throws IOException {
 
    StringBuilder  stringBuilder;
    FileReader     fileReader     = null;
    BufferedReader bufferedReader = null;
    try {
        stringBuilder  = new StringBuilder();
        fileReader     = new FileReader(filePath);
        bufferedReader = new BufferedReader(fileReader);
        String line;
        while ((line = bufferedReader.readLine()) != null)
            stringBuilder.append(line).append('\n');
         
    } finally {
        if (bufferedReader != null) try { bufferedReader.close(); } catch (Exception ex) { /* Do Nothing */ }
        if (fileReader     != null) try { fileReader    .close(); } catch (Exception ex) { /* Do Nothing */ }
    }
     
    return stringBuilder.toString();
}


텍스트 파일 라인 단위로 읽어서 처리

?
FileReader     fileReader     = null;
BufferedReader bufferedReader = null;
try {
    fileReader     = new FileReader(filePath);
    bufferedReader = new BufferedReader(fileReader);
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        [[line 값 처리]]
    }
     
} finally {
    if (bufferedReader != null) try { bufferedReader.close(); } catch (Exception ex) { /* Do Nothing */ }
    if (fileReader     != null) try { fileReader    .close(); } catch (Exception ex) { /* Do Nothing */ }
}


텍스트 파일 쓰기 (Utility 타입)

?
public static void write(String filePath, String content) throws IOException {
 
    FileWriter     fileWriter     = null;
    BufferedWriter bufferedWriter = null;
    try {
        fileWriter     = new FileWriter(filePath);
        bufferedWriter = new BufferedWriter(fileWriter);
        bufferedWriter.write(content);
 
    } finally {
        if (bufferedWriter != null) try { bufferedWriter.close(); } catch (Exception ex) { /* Do Nothing */ }
        if (fileWriter     != null) try { fileWriter    .close(); } catch (Exception ex) { /* Do Nothing */ }
    }
}


폴더 내 파일 리스트 처리

?
File folder = new File([[폴더 경로]]);
for (File filex: folder.listFiles()) {
    String fileName     = filex.getName();
    String absolutePath = filex.getAbsolutePath();
    [[파일 처리]]
}


파일의 특정 바이트부터 특정 길이만큼 읽기

(warning) offset 위치를 계산할 때는 New Line 문자 ("\n" or "\r\n")의 길이도 계산에 포함할 지 검토해야 함
?
public static byte[] readBytes(String filePath, int offset, int length) throws IOException {
 
    RandomAccessFile randomFile = null;
    try {
        randomFile = new RandomAccessFile(filePath, "r"); 
        randomFile.seek(offset);
         
        byte[] dataBytes = new byte[length];
        randomFile.readFully(dataBytes);
         
        return dataBytes;
         
    } finally {
        if (randomFile != null) try { randomFile.close(); } catch (Exception ex) { /* Do Nothing */ }
    }
}

댓글

이 블로그의 인기 게시물

AWS 가용성,확장성

Serverless computing 도입시 고려사항