Java如何读取文档

在Java中读取文档常用java.iojava.nio包,通过BufferedReader读取文本文件内容,或使用Files.readAllLines()(Java 7+)直接获取行列表,二进制文件可用FileInputStream处理,注意异常处理和资源关闭(或使用try-with-resources)。

在Java中读取文档是常见的文件操作任务,涵盖文本文件(如TXT、CSV)、二进制文件(如图片)及结构化文档(如PDF、Word),以下是详细方法及最佳实践,符合Java标准API和行业规范:

Java如何读取文档


读取文本文件(TXT、CSV等)

使用 java.nio.file.Files(推荐,Java 7+)

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class ReadTextFile {
    public static void main(String[] args) {
        try {
            // 读取整个文件为字符串
            String content = Files.readString(Paths.get("example.txt"));
            System.out.println(content);
            // 按行读取为列表
            List<String> lines = Files.readAllLines(Paths.get("data.csv"));
            lines.forEach(System.out::println);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

优势:代码简洁,自动处理编码(默认UTF-8),适合中小文件。

使用 BufferedReader(大文件流式读取)

import java.io.BufferedReader;
import java.io.FileReader;
public class ReadLargeFile {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("large.log"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line); // 逐行处理
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

优势:内存高效,适用于GB级文件。


读取二进制文件(图片、视频等)

import java.nio.file.Files;
import java.nio.file.Paths;
public class ReadBinaryFile {
    public static void main(String[] args) {
        try {
            byte[] bytes = Files.readAllBytes(Paths.get("image.png"));
            // 字节数据可用于写入新文件或网络传输
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意:大文件建议用 BufferedInputStream 分块读取。


读取结构化文档(PDF、Word、Excel)

需借助第三方库,确保Maven依赖:

Java如何读取文档

PDF文档(Apache PDFBox)

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.27</version>
</dependency>
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
public class ReadPDF {
    public static void main(String[] args) {
        try (PDDocument doc = PDDocument.load(Paths.get("doc.pdf").toFile())) {
            PDFTextStripper stripper = new PDFTextStripper();
            String text = stripper.getText(doc);
            System.out.println(text);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Word文档(Apache POI)

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
public class ReadWord {
    public static void main(String[] args) {
        try (XWPFDocument doc = new XWPFDocument(Files.newInputStream(Paths.get("report.docx")));
             XWPFWordExtractor extractor = new XWPFWordExtractor(doc)) {
            System.out.println(extractor.getText());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Excel文件(Apache POI)

import org.apache.poi.ss.usermodel.*;
public class ReadExcel {
    public static void main(String[] args) {
        try (Workbook workbook = WorkbookFactory.create(Files.newInputStream(Paths.get("data.xlsx")))) {
            Sheet sheet = workbook.getSheetAt(0);
            for (Row row : sheet) {
                for (Cell cell : row) {
                    System.out.print(cell.toString() + "t");
                }
                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键注意事项

  1. 异常处理
    必须捕获 IOException,使用 try-with-resources(如上例)自动关闭资源,避免内存泄漏。

  2. 文件编码
    文本文件需明确字符集(如GBK):

    BufferedReader br = new BufferedReader(
        new InputStreamReader(new FileInputStream("file.txt"), StandardCharsets.GBK)
    );
  3. 性能优化

    • 大文本文件:用 BufferedReader 缓冲流。
    • 大二进制文件:用 BufferedInputStream 分块读取。
  4. 路径安全
    使用 Paths.get()new File() 时,验证文件是否存在:

    Java如何读取文档

    Path path = Paths.get("user_input.txt");
    if (Files.exists(path)) {
        // 读取操作
    }

  • 文本/二进制文件:优先选 java.nio.file.Files(简单场景)或缓冲流(大文件)。
  • 结构化文档:用成熟第三方库(如PDFBox、Apache POI)。
  • 健壮性:始终处理异常、指定编码、关闭资源。

引用说明

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/47350.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月6日 03:28
下一篇 2025年7月6日 03:31

相关推荐

  • Java中如何高效获取文件尾坠(末尾内容)的方法探讨?

    在Java中,获取文件尾坠(即文件末尾的空行或特定字符)可以通过多种方法实现,以下是一些常用的方法,包括使用Java内置的类和方法,以及一些常用的第三方库,使用BufferedReaderimport java.io.BufferedReader;import java.io.FileReader;import……

    2025年9月11日
    1000
  • java字符串怎么添加字符串数组

    Java中,可以使用StringBuilder或StringBuffer来高效地将字符串数组添加至一个字符串。,“`java,String str = “Initial”;,String[] arr = {“A”, “B”, “C”};,StringBuilder sb = new StringBuilder(str);,for (String s : arr) {, sb.append(s);,},String result = sb.toString();,

    2025年7月18日
    1800
  • logaster商标如何评估其设计独特性和市场竞争力?

    在当今的商业环境中,商标作为企业身份的象征,其重要性不言而喻,一个独特的商标能够帮助企业区分于竞争对手,建立品牌形象,并保护自身的知识产权,{logaster商标}作为一款专业的商标设计工具,凭借其便捷的操作和丰富的设计资源,成为了众多创业者和企业家的首选,本文将深入探讨{logaster商标}的特点、使用方法……

    2026年2月11日
    1500
  • java中怎么设置图形颜色

    Java中,可通过g.setColor(Color对象)或setPaint()方法设置图形颜色,支持预定义色及RGB自定义

    2025年9月8日
    3200
  • 如何在Java Web中实现边框?

    在Java Web中实现边框通常使用CSS样式控制,通过HTML元素的border属性或Bootstrap等框架的边框工具类实现,常见方式包括:1. 在JSP/HTML标签内联style添加border;2. 引入CSS文件定义类选择器设置边框样式;3. 使用前端框架预置边框类快速应用。

    2025年7月7日
    3200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN