[고찰] Java에서 줄 바꿈된 라인, 병합하기

Study/Java 2019. 12. 8. 16:46 Posted by meanoflife
반응형

  # Excel-file을 Text-file로 변환하여 Java로 읽을 때, "내용內 줄 바꿈"된 라인을 처리하는 방법은?

 

프로젝트를 수행하다 보면, 보안을 강화하기 위해 <문서보안>솔루션을 많이 사용합니다.

<문서보안>은 오피스군 제품 및 *.txt등 문서 파일들을 암호화하여 관리합니다.

 

문서보안 솔루션에서 로그인되지 않은 상태에서는 암호화된 문서를 정상적으로 읽을 수 없습니다.

(암호화된 문서를 비로그인 상태에서 OPEN하게 되면, 깨진 문자처럼 화면에 표시됩니다. 마치 Binary-file 처럼... )

 

Java에서 Excel-file을 핸들링하기 위해 POI Library를 사용하여 작업을 하는데,

문서보안 솔루션에 의해 암호화된 파을은 바로 읽을 수가 없습니다.

 

하여, Excel-VBA를 이용하여 "암호화되지 않는 확장자 유형"으로 ASCII파일을 생성합니다.

( 일반적인 문서파일의 확장자가 아닌 확장자( *.dat 등 )로 사용하면 문서보안에서 암호화하지 않습니다. )

 

이렇게 ASCII파일 형태로 변환된 파일을 Java에서 읽어 사용하면 됩니다.

 

이때, Excel 문서내용중 Cell에 "잘 바꿈"문자가 포함되어 있으면, ASCII파일을 생성할때 줄바꿈이 일어나서 내용이 다른줄에 표시됩니다. 이를 Java로 읽으면 1개의 라인정보를 2개의 라인으로 읽게되는 오류가 발생합니다.

 

이를 해결하고자 하는 것이 이 고찰의 주요내용입니다.

방법1. 엑셀의 첫번째 열을 라인의 시작을 알 수 있는 특정 값으로 사용.

  - Java에서 라인을 읽을 때, 라인의 첫번째 데이터가 지정된 '특정 값'으로 시작하는지를 체크하고

  - 시작문자가 맞으면 새로운 라인으로 인지, 그렇지 않으면 '줄 바꿈'문자에 의한 것으로 간주하여 이전 줄에 병합함.

 

방법2. 데이터( Cell )수로 판단 ( 첫번째 열을 '시작 문자'로 사용하지 못할 경우 )

  - Java에서 라인을 읽어 Delemeter로 분할할 때, 데이터의 갯수를 체크함.

  - 데이터의 갯수가 부족하면 '줄 바꿈'문자가 있는 것으로 판단하여 라인을 병함함.

    ( bit를 관리하여 데이터가 부족한 다음 라인을 병합하도록 함 )

일단, 위의 2가지 방법으로 적용하여 사용하고 있는데 Case를 따져보지는 않았으나 뭔가 문제점이 있을 것 같습니다.

그리고, 위의 두가지 방법 모두 제약조건이 있습니다.

 

Excel-VBA에서 원천적으로 '줄 바꿈'을 처리하는 방법이 있을 수 있으나, 이도 제약이 따를 것 같습니다.

( Ex. '줄 바꿈'문자를 특정 문자리 치환하고, Java에서 복원하는 방법 등 )

 

가장 이상적인 건 <문서보안>으로 암호화된 파일을 복호화한 후 POI를 통해 읽으면 되지만, 현실의 제약이 따르네요.

제약조건 없이 처리하기란 힘들 것 같지만, 좀 더 효율적인( 공수가 적게 드는 ) 방법이 없을까요...?

 

반응형