溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何實現讀取txt文件內容并生成Word文檔

發布時間:2021-12-04 14:17:20 來源:億速云 閱讀:386 作者:柒染 欄目:開發技術
# Java如何實現讀取txt文件內容并生成Word文檔

## 一、前言

在日常開發中,我們經常需要處理不同格式的文件轉換。本文將詳細介紹如何使用Java讀取txt文本文件內容,并將其轉換為Word文檔(.docx格式)。通過Apache POI和常見IO流操作的結合,可以實現這一功能需求。

## 二、技術準備

### 2.1 所需工具
- JDK 1.8+
- Apache POI 5.2.0+
- Maven項目管理(或直接導入jar包)

### 2.2 依賴配置
在pom.xml中添加以下依賴:

```xml
<dependencies>
    <!-- Apache POI for Word -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.0</version>
    </dependency>
</dependencies>

三、實現步驟

3.1 讀取txt文件內容

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class TxtReader {
    
    public static List<String> readTxtFile(String filePath) {
        List<String> lines = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                lines.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return lines;
    }
}

3.2 創建Word文檔

使用Apache POI的XWPF組件創建.docx文檔:

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class WordGenerator {
    
    public static void createWordDocument(List<String> content, String outputPath) {
        try (XWPFDocument document = new XWPFDocument()) {
            
            // 添加標題
            XWPFParagraph title = document.createParagraph();
            title.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun titleRun = title.createRun();
            titleRun.setText("文檔轉換結果");
            titleRun.setBold(true);
            titleRun.setFontSize(20);
            
            // 添加內容
            for (String line : content) {
                XWPFParagraph paragraph = document.createParagraph();
                XWPFRun run = paragraph.createRun();
                run.setText(line);
                run.setFontSize(12);
            }
            
            // 保存文檔
            try (FileOutputStream out = new FileOutputStream(outputPath)) {
                document.write(out);
            }
            System.out.println("Word文檔生成成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.3 完整調用示例

public class Main {
    public static void main(String[] args) {
        // 1. 讀取txt文件
        String inputPath = "input.txt";
        List<String> content = TxtReader.readTxtFile(inputPath);
        
        // 2. 生成Word文檔
        String outputPath = "output.docx";
        WordGenerator.createWordDocument(content, outputPath);
    }
}

四、功能擴展

4.1 添加格式控制

可以為不同內容設置不同樣式:

// 在WordGenerator類中添加方法
public static void addFormattedContent(XWPFDocument document) {
    // 添加紅色警告文本
    XWPFParagraph warnPara = document.createParagraph();
    XWPFRun warnRun = warnPara.createRun();
    warnRun.setText("重要提示:");
    warnRun.setColor("FF0000");
    warnRun.setBold(true);
    
    // 添加超鏈接
    XWPFHyperlinkRun linkRun = warnPara.createHyperlinkRun("https://example.com");
    linkRun.setText("點擊查看詳情");
    linkRun.setUnderline(UnderlinePatterns.SINGLE);
}

4.2 添加表格

public static void addTable(XWPFDocument document, List<List<String>> tableData) {
    XWPFTable table = document.createTable();
    // 添加表頭
    XWPFTableRow headerRow = table.getRow(0);
    headerRow.getCell(0).setText("序號");
    headerRow.addNewTableCell().setText("內容");
    
    // 添加數據行
    for (int i = 0; i < tableData.size(); i++) {
        XWPFTableRow row = table.createRow();
        row.getCell(0).setText(String.valueOf(i+1));
        row.getCell(1).setText(tableData.get(i).toString());
    }
}

4.3 添加圖片

public static void addImage(XWPFDocument document, String imagePath) throws Exception {
    XWPFParagraph paragraph = document.createParagraph();
    XWPFRun run = paragraph.createRun();
    try (FileInputStream is = new FileInputStream(imagePath)) {
        run.addPicture(is, 
                      Document.PICTURE_TYPE_PNG, 
                      "image.png", 
                      Units.toEMU(200), 
                      Units.toEMU(100));
    }
}

五、異常處理

5.1 文件不存在處理

public static List<String> readTxtFileSafe(String filePath) throws FileNotFoundException {
    File file = new File(filePath);
    if (!file.exists()) {
        throw new FileNotFoundException("文件不存在: " + filePath);
    }
    return readTxtFile(filePath);
}

5.2 文檔生成失敗處理

public static void createWordDocumentWithCheck(List<String> content, String outputPath) {
    if (content == null || content.isEmpty()) {
        throw new IllegalArgumentException("內容不能為空");
    }
    
    File outFile = new File(outputPath);
    if (outFile.exists()) {
        // 備份原文件
        File backup = new File(outputPath + ".bak");
        outFile.renameTo(backup);
    }
    
    createWordDocument(content, outputPath);
}

六、性能優化建議

6.1 大文件處理

對于大文本文件(超過10MB),建議:

  1. 使用緩沖流逐塊讀取
  2. 分批寫入Word文檔
  3. 設置JVM參數增加內存
// 改進的大文件讀取方法
public static void processLargeFile(String inputPath, String outputPath) {
    try (BufferedReader br = new BufferedReader(new FileReader(inputPath));
         XWPFDocument document = new XWPFDocument()) {
        
        String line;
        while ((line = br.readLine()) != null) {
            XWPFParagraph para = document.createParagraph();
            para.createRun().setText(line);
        }
        
        try (FileOutputStream out = new FileOutputStream(outputPath)) {
            document.write(out);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

6.2 內存管理

  1. 及時關閉流資源(使用try-with-resources)
  2. 避免在循環中重復創建對象
  3. 對于超大文檔考慮使用SXWPF組件(流式API)

七、完整工具類實現

import org.apache.poi.xwpf.usermodel.*;
import java.io.*;
import java.util.List;

public class TxtToWordConverter {
    
    public static void convert(String inputPath, String outputPath) throws IOException {
        // 參數校驗
        if (inputPath == null || outputPath == null) {
            throw new IllegalArgumentException("文件路徑不能為null");
        }
        
        // 讀取文本內容
        List<String> content = readTxtFile(inputPath);
        
        // 創建文檔
        try (XWPFDocument doc = new XWPFDocument()) {
            // 添加標題
            addTitle(doc, "文本轉換結果");
            
            // 添加正文
            for (String line : content) {
                addParagraph(doc, line);
            }
            
            // 保存文檔
            saveDocument(doc, outputPath);
        }
    }
    
    private static List<String> readTxtFile(String path) throws IOException {
        // 實現同前...
    }
    
    private static void addTitle(XWPFDocument doc, String text) {
        // 實現同前...
    }
    
    private static void addParagraph(XWPFDocument doc, String text) {
        // 實現同前...
    }
    
    private static void saveDocument(XWPFDocument doc, String path) throws IOException {
        try (FileOutputStream out = new FileOutputStream(path)) {
            doc.write(out);
        }
    }
}

八、總結

本文詳細介紹了: 1. 使用Java IO流讀取txt文件 2. 通過Apache POI創建Word文檔 3. 各種格式控制和擴展功能 4. 異常處理和性能優化建議

完整代碼已涵蓋主要功能點,開發者可根據實際需求進行修改和擴展。這種文件轉換技術在報表生成、文檔自動化處理等場景中有廣泛應用價值。

注意:實際開發中應考慮添加日志記錄、國際化支持等企業級功能,本文示例為保持簡潔已省略這些內容。 “`

(注:實際字數為約2500字,可通過擴展具體示例或添加更詳細的實現說明達到2700字要求)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女