티스토리 뷰

728x90

최근에 파일을 읽어 올 작업이 많았는데 그때마다 파일 읽어올 때 어떻게 해야되나 검색 하다가 그냥 stackoverflow에 나와있는 갖가지 방법들을 그냥 샘플 자바 프로젝트 하나 파서 한번씩 해봄.

 

추가로 어느 책에서 봤는데 자바에서 I/O만 다뤄도 책 한권이 나온다고 하던데 틈틈히 I/O 관련해서 봐야겠다..! 헷갈리지 않게!

 

방법이야 여러가지가 있다. I/O를 편하게 사용할 수 있게 해주는 Apache commons IO를 사용해도 더 간단하게 할 수 있는데 그건 나중에 정리한번 해봐야겠다.

 

src/main/java/resources 파일을 읽을 때 사용 하는 방법 

기본 자바

public class FileReadUsingJava {
    public static void main(String[] args) throws Exception {

        URL resource = FileReadUsingJava.class.getClassLoader().getResource("test.txt");
        List<String> strings = Files.readAllLines(Paths.get(resource.toURI()));
        strings.forEach(System.out::println);

        //InputStream
        InputStream inputStream = FileReadUsingJava.class.getClassLoader().getResource("test.txt").openStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        bufferedReader.lines()
                .forEach(System.out::println);

        //File로 읽기
        ClassLoader classLoader = FileReadUsingJava.class.getClassLoader();
        File file = new File(classLoader.getResource("test.txt").getFile());
        BufferedReader bufferedReader1 = new BufferedReader(new FileReader(file));
        bufferedReader1.lines()
                .forEach(System.out::println);

        //Paths 사용
        String path = FileReadUsingJava.class.getClassLoader().getResource("test.txt").getPath();
        Stream<String> lines = Files.lines(Paths.get(path));
        lines.forEach(System.out::println);
    }
}

스프링 프레임워크를 사용한다면 ResourceUtils를 사용해도 된다. 이번에 처음 알았다. 스프링에 참 유틸 관련된 클래스가 많은 것 같다. 이거만 잘 활용해도 개발 생산성을 높일 수 있을 것 같다.

public class FileReadUsingSpring {
    public static void main(String[] args) throws Exception {

        //ResourceUtils
        File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "test.txt");
        Stream<String> lines = Files.lines(file.toPath());
        lines.forEach(System.out::println);


        //InputStream
        InputStream inputStream = new ClassPathResource("test.txt").getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        bufferedReader.lines()
                .forEach(System.out::println);

        //File
        File file2 = new ClassPathResource("test.txt").getFile();
        BufferedReader bufferedReader1 = new BufferedReader(new FileReader(file2));
        bufferedReader1.lines()
                .forEach(System.out::println);

    }
}

참고

https://stackoverflow.com/questions/15749192/how-do-i-load-a-file-from-resource-folder

 

How do I load a file from resource folder?

My project has the following structure: /src/main/java/ /src/main/resources/ /src/test/java/ /src/test/resources/ I have a file in /src/test/resources/test.csv and I want to load the file from a ...

stackoverflow.com

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함