자바 람다식으로 텍스트 파일을 읽은 뒤 특정 텍스트 추출하기 (tistory.com)
이전에 람다식으로 파일을 읽어 텍스트를 추출하는 Function을 작성 한 적이 있는데
실무에서 사용을 하다보니 문제가 있엇다.
한국어의 특성상 인코딩 방식 때문에 파일을 열어서 텍스트를 추출하지 못했던게 원인이어서
텍스트를 추출하는 것이 불가능했다.
그래서 실무에서 해당 소스코드를 적용하려면 소스코드를 조금 수정 할 필요가 있다.
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class Lamda {
public static void main(String[] args) throws IOException {
List<String> fileList = new ArrayList<>();
Files.newDirectoryStream(Paths.get("D:\\다운로드"), path -> path.toString().endsWith("c")).forEach(path->fileList.add(path.toString()));
List<String> outputFile = new ArrayList<>();
for(String fileName : fileList){
try{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "euc-kr"));
outputFile.add("파일명"+fileName);
br.lines().filter(line -> line.contains("SELECT"))
.map(line->line.replaceAll("\t", ""))
.forEach(outputFile::add);
}catch(Exception e){}
}
outputFile.forEach(System.out::println);
Files.write(Paths.get("c:/output.txt"), outputFile);
}
}
우선 Files.newDirectoryStream을 이용하여 해당 디렉터리에 있는 파일 목록들을 추출한다. endsWith("c")는 c 확장자로 끝나는 파일 목록들을 찾겠다는 이야기이다.
그다음 fileList.add(path.toString()); 문구는 찾아낸 파일 목록들을 fileList에 저장하겠다는 의미이다.
List<String> outputFile = new ArrayList<>(); 이 문구는 파일을 읽고 난 뒤에 정제된 파일 내용을 담기 위해 선언한 것이다.
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "euc-kr"));
위의 문구에는 한글 내용이 포함된 파일을 읽기 위해 "euc-kr"이 작성된 것을 볼 수 있다.
br.lines()를 통해 SELECT라는 문구가 포함된 라인을 추출하고 outputFile 리스트 안에 담는다.
outputFile.forEach(System.out::println); 문구가 실행되면 실제 본인이 정제한 내용들을 출력한다.
Files.write(Paths.get("c:/output.txt"), outputFile);가 실행되면 실제 본인이 정제한 내용들을 c:/output.txt에 작성한다.
'개발언어 > JavaFunction' 카테고리의 다른 글
모던하게 자바 날짜 차이 구하기 (0) | 2021.07.08 |
---|---|
자바 모던하게 LocalDate클래스와 LocalDateTime클래스를 이용하여 날짜 계산하는 방법 (0) | 2021.07.07 |
자바 숫자형 List에서 람다식으로 SUM, MAX, MIN 값 구하기 (0) | 2021.06.23 |
자바 2차원 배열을 평면화 시킨 후 람다식으로 데이터 검색하기 (0) | 2021.06.23 |
자바 람다식으로 텍스트 파일을 읽은 뒤 특정 텍스트 추출하기 (0) | 2021.05.03 |