대충벌레 블로그
article thumbnail
반응형

자바 프로젝트 생성

 

파일 읽기

파일을 읽을때 클래스 로더에 있는 파일을 읽는것과 경로상에 있는 파일을 읽을때 두가지 소스를 정리해보려고 한다.

항상 파일쪽을 만들때 헷갈려서 참고해야겠다.

ReadResourceFile

package utils.files;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * 클래스로더를 통해서 리소스 파일 읽기
 */
public class ReadResourceFile {
    public static void main(String[] args) {
        String resourcePath = "/templates/readFile.txt";
        try (
                InputStream inputStream = ReadResourceFile.class.getResourceAsStream(resourcePath);
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader reader = new BufferedReader(inputStreamReader)
        ) {
            String line;
            while( (line = reader.readLine()) != null){
                System.out.println(line);
            }

        } catch (IOException e) {

        }
    }
}

 

try-catch 문을 대신해서 Java 7 버전이후부터는 try-with-resources 구문이 나왔다고 한다.

자동으로 안쓰는 자원을 close 해준다해서 사용해봤다.

클래스명.class.getResourceAsStream 은 src/main/resources 의 클래스패스를 접근할수 있다고 한다.

클래스패스에 있는 txt 파일을 읽어서 print 해주는 코드이다.

 

ReadResourceFile2

package utils.files;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class ReadResourceFile2 {
    public static void main(String[] args) {
        final Path DIR_PATH = Paths.get("C:","filePath","post");
        Path filePath = Paths.get(DIR_PATH + File.separator + "writeFile.txt");
        try(BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(filePath))){
            StringBuilder builder = new StringBuilder();
            byte[] buffer = new byte[1024];
            int byteRead;

            while( (byteRead = bis.read(buffer)) != -1){
                builder.append(new String(buffer, 0,byteRead));
            }
            System.out.println("builder = " + builder.toString());
        }catch (IOException e){

        }
    }
}

 

첫번째와는 다르게 BufferedInputStream 을 활용해서 해보았다 C드라이브 하위경로에 있는 writeFile.txt를 읽는 소스이다.

BufferedReader 와 BufferedInputStream 의 차이는 정확히 몰라서 검색해 보았다.

 

둘다 데이터를 효율적으로 읽기위한 클래스 이지만 BufferedInputStream 은 바이트 단위로 데이터 읽을때 사용되며 주로 파일이나 네트워크 소켓과 같은 이진 데이터를 읽을때 사용되며 BufferedReader의 경우 문자 단위로 데이터 읽을때 사용되며 텍스트파일이네 문자열 데이터를 읽을때 사용된다 .

파일 쓰기

package utils.files;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

/**
 * 파일 생성 및 쓰기
 */
public class WriteFile {
    static final String FILE_PATH = Paths.get("C:","filePath","post").toString();

    public static void main(String[] args) {
        LocalDate now = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        String fileName = "writeFile" + now.format(formatter) + ".txt";
        try(BufferedWriter writer = new BufferedWriter(new FileWriter(new File(FILE_PATH + File.separator + fileName)))){
            StringBuilder builder = new StringBuilder();
            String line;
            writer.write("안녕하세요 1");
        }catch (IOException e){

        }
    }



}

 

BufferedWriter 를 이용해서 파일을 생성해준다.

BufferedWriter 와 BufferedReader를 이용해서 파일을 읽어서 새 파일을 쓸때도 쓸수있다.

 

반응형
profile

대충벌레 블로그

@대충벌레

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!