이미지09
Coding Story/JAVA

[ Java ] FileUtils 사용 ( readLines ) Maven Repository

반응형

 

 

이전 포스팅에서 간단하게 txt 파일을 읽어와 출력 및 비교를 해보았다.

 

사용했던 코드는 아래와 같다.

@Test
public void test() {
	
    try {
        //ATEXT.txt 와 BTEXT.txt 파일을 가져와 객체를 생성
        File aText = new File("C:/Users/jnmoon/Desktop/TEST/ATEXT/txt");
        File bText = new File("C:/Users/jnmoon/Desktop/TEST/BTEXT/txt");

        //A, B 각각 file 입력 스트림을 생성
        FileReader aReader = new FileReader(aText);
        FileReader bReader = new FileReader(bText);
		
        //스트림으로 입력 버퍼를 생성
        BufferedReader aBufReader = new BufferedReader(aReader);
        BufferedReader bBufReader = new BufferedReader(bReader);
		
        List<String> aLines = new ArrayList<String>();
        List<String> bLines = new ArrayList<String>();
		
        String aLine = "";
        String bLine = "";
		
        //A의 텍스트내용을 한 줄씩 aLine에 담고 이를 aLines에 add.
        while((aLine = aBufReader.readLine()) != null) {
            aLines.add(aLine);
        }
        
        //A Buffer 닫아줌
        aBufReader.close();
        
        //B의 텍스트내용을 한 줄씩 bLine에 담고 이를 bLines에 add.
        while((bLine = bBufReader.readLine()) != null) {
            bLines.add(bLine);
        }
        
        //B Buffer 닫아줌
        bBufReader.close();
		
        for(int i = 0 ; i < aLines.size() ; i++) {
        
            int matchCount = 0;
			
            for(int j = 0 ; j < bLines.size() ; j++) {
				
                if(aLines.get(i).equals(bLines.get(j)) {
                    matchCount = matchCount + 1;
                }
            }
			
            if(matchCount > 0) {
                System.out.println("동일한 데이터 : " + aLines.get(i));
            }
        }
    } catch(Exception e) {
        //TODO
    }
}

 

 

결과적으로만 보면 파일을 읽어와 출력하는 단순한 목적인데

 

파일을 가져와서, 파일을 읽고, 내용을 뽑고, 내용을 변수에 담고, 이를 리스트에 담고, 이를 비교하고, 이를 출력하고...

 

코드를 작성하다 보면 문득 의구심이 떠오른다. 세상에 천재들은 워낙 많다.

 

분명 나 이전에 누군가가 생각해봤을 법한, 누군가가 이미 만들었을 법한...

 

1에서 100까지 다 작성하고 있는 나 대신,

 

1에서 100까지 한 방에 처리하는 모듈이나 메서드를 이미 누군가 만들어 놨을거라는 것.

 

그게 바로 Apache Software 재단에서 이미 제공하는 자바기반의 입출력 관련 오픈소스 Commons IO 이다.

 

 

 

 

 

그럼 Commons IO 가 가지고 있는 FileUtils 를 사용해보도록 하자.

 

아래와 같이 "fileutils maven repository" 를 검색해 해당 사이트로 접속한다.

( https://mvnrepository.com 으로 들어가서 직접 검색해서 찾아도 된다 )

fileutils maven repository 라고 구글 검색 사진

 

 

아래의 빨간 박스내의 내용을 복사 ( 버전은 본인 상황에 맞게 선택 )

텍스트 내용 복사 사진

 

 

복사한 코드를 본인 프로젝트의 pom.xml 에 붙여넣고 maven update 를 해주면 된다.

 

 

자 이제, 이전에 작성했던 코드 중 파일을 가져와 내용을 읽어들여 리스트에 담았던 부분을 보자.

@Test
public void test() {
	
    try {
        
        File aText = new File("C:/Users/jnmoon/Desktop/TEST/ATEXT/txt");
        File bText = new File("C:/Users/jnmoon/Desktop/TEST/BTEXT/txt");

        FileReader aReader = new FileReader(aText);
        FileReader bReader = new FileReader(bText);
		
        BufferedReader aBufReader = new BufferedReader(aReader);
        BufferedReader bBufReader = new BufferedReader(bReader);
		
        List<String> aLines = new ArrayList<String>();
        List<String> bLines = new ArrayList<String>();
		
        String aLine = "";
        String bLine = "";
		
        while((aLine = aBufReader.readLine()) != null) {
            aLines.add(aLine);
        }
        
        aBufReader.close();
        
        while((bLine = bBufReader.readLine()) != null) {
            bLines.add(bLine);
        }
        
        bBufReader.close();
		
        //비교 반복문(생략)
        
    } catch(Exception e) {
        //TODO
    }
}

 

 

위처럼 버퍼를 통해 파일을 가져와 읽어들인 후 리스트에 넣었던 모든 과정들을,

 

FileUtils 가 가지고 있는 readLines() 를 사용한다면?

@Test
public void test() {
	
    try {
        
        List<String> aLines = FileUtils.readLines(new File("C:/Users/jnmoon/Desktop/TEST/ATEXT/txt"));
        List<String> bLines = FileUtils.readLines(new File("C:/Users/jnmoon/Desktop/TEST/BTEXT/txt"));
        
		//비교 반복문(생략)
        
    } catch(Exception e) {
        //TODO
    }
}

 

 

파일 객체를 인자로 넣어주기만 하면 이처럼 읽어들여 값을 리스트에 바로 담아주는 신세계를 볼 수 있다.

 

이 외에도 파일을 읽어 String 으로 반환해주는 readFileToString 등 여러가지 기능이 있으니 

 

한 번 API 를 참고해보면 유용하게 쓰일 수 있을 것이다.

 

 

 

 

 

반응형