이전 포스팅에서 간단하게 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 으로 들어가서 직접 검색해서 찾아도 된다 )
아래의 빨간 박스내의 내용을 복사 ( 버전은 본인 상황에 맞게 선택 )
복사한 코드를 본인 프로젝트의 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 를 참고해보면 유용하게 쓰일 수 있을 것이다.
'Coding Story > JAVA' 카테고리의 다른 글
[ Java ] TXT 파일 한 줄씩 읽기, 두 개의 TXT 파일 비교, 파일 출력 (0) | 2021.02.10 |
---|---|
[ Java ] 문자에서 정수, 실수에서 정수, 정수에서 문자 등 형변환 (0) | 2021.01.06 |
[ Java ] 자바 반복문의 continue 와 break (5) | 2020.12.16 |
[ Java ] 변수의 6가지 성질 ( 속성 ) (4) | 2020.10.28 |
[ Spring ] 스프링 Export & Import 방법, Import 에러 (0) | 2020.10.28 |