[java] Apache POI를 이용한 Word 문서 경로 변경

Apache POI는 Java에서 Microsoft Office 파일을 다룰 수 있는 라이브러리입니다. 이 라이브러리를 사용하여 Word 문서의 경로를 변경하는 방법을 알아보겠습니다.

1. 의존성 추가

먼저 Maven 프로젝트에서 Apache POI에 대한 의존성을 추가해야 합니다. 다음은 Maven 의존성을 추가하는 예시입니다.

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>

2. 문서 경로 변경하기

Apache POI를 사용하여 Word 문서의 경로를 변경하려면 다음과 같은 단계를 따라야 합니다.

2.1. Word 문서 열기

먼저 원본 Word 문서를 열어야 합니다. 이 작업은 XWPFDocument 클래스를 사용하여 수행합니다. 아래의 코드는 Word 문서를 열고 해당 문서의 내용을 로드하는 방법을 보여줍니다.

String filePath = "원본_문서_경로.docx";
FileInputStream fis = new FileInputStream(filePath);
XWPFDocument document = new XWPFDocument(fis);

2.2. 문서 내용 변경

다음으로, 원하는 대상 경로로 Word 문서의 경로를 변경해야 합니다. 이를 위해 XWPFDocument 객체의 getParagraphs 메서드로 문단을 얻은 뒤, 해당 문단을 통해 문장을 탐색합니다. 경로 변경은 문장의 텍스트를 대상으로 수행됩니다.

아래의 코드는 문단과 문장을 탐색하며 원하는 경로로 변경하는 예시입니다.

List<XWPFParagraph> paragraphs = document.getParagraphs();

for (XWPFParagraph paragraph : paragraphs) {
    List<XWPFRun> runs = paragraph.getRuns();
    for (XWPFRun run : runs) {
        String text = run.getText(0);
        if (text.contains("대상_경로")) {
            String replacedText = text.replace("대상_경로", "변경_경로");
            run.setText(replacedText, 0);
        }
    }
}

2.3. 변경된 문서 저장

경로가 변경된 Word 문서를 저장해야 합니다. 이를 위해 FileOutputStream 클래스를 사용하여 변경된 문서의 경로로 저장합니다.

아래의 코드는 변경된 문서를 저장하는 방법을 보여줍니다.

String outputFilePath = "변경된_문서_경로.docx";
FileOutputStream fos = new FileOutputStream(outputFilePath);
document.write(fos);
fos.close();

3. 전체 코드

앞서 언급한 모든 코드를 하나로 합쳐서 전체 코드를 확인할 수 있습니다.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
  
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
  
public class WordDocumentPathChanger {
  
    public static void main(String[] args) throws IOException {
        String filePath = "원본_문서_경로.docx";
        String outputFilePath = "변경된_문서_경로.docx";
  
        FileInputStream fis = null;
        FileOutputStream fos = null;
  
        try {
            fis = new FileInputStream(filePath);
            XWPFDocument document = new XWPFDocument(fis);
  
            List<XWPFParagraph> paragraphs = document.getParagraphs();
  
            for (XWPFParagraph paragraph : paragraphs) {
                List<XWPFRun> runs = paragraph.getRuns();
                for (XWPFRun run : runs) {
                    String text = run.getText(0);
                    if (text.contains("대상_경로")) {
                        String replacedText = text.replace("대상_경로", "변경_경로");
                        run.setText(replacedText, 0);
                    }
                }
            }
  
            fos = new FileOutputStream(outputFilePath);
            document.write(fos);
        } finally {
            if (fis != null) {
                fis.close();
            }
            if (fos != null) {
                fos.close();
            }
        }
    }
}

위의 코드를 실행하면 지정한 원본 경로에 있는 Word 문서의 경로가 변경된 후, 지정한 출력 경로에 새로운 Word 문서가 생성됩니다.

위의 코드를 사용하여 Apache POI를 이용하여 Word 문서의 경로를 변경할 수 있습니다. Apache POI의 다른 기능과 함께 사용하여 더 다양한 작업을 수행할 수도 있습니다.