Java 实现TXT文件上传并解析的Spring Boot应用

在本篇博客中,我们将探讨如何使用Spring Boot框架实现一个简单的功能:通过HTTP POST请求上传TXT文件,并对文件内容进行解析。此示例适用于处理包含特定格式数据的文本文件,如用户存款信息等。

1. 添加必要的依赖

首先,确保你的​​pom.xml​​​或​​build.gradle​​文件中包含了必要的依赖项。对于这个例子,我们需要Spring Web和Apache Commons IO库来简化文件操作:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.8.0</version>
    </dependency>
</dependencies>

2. 创建控制器方法

接下来,我们创建一个控制器类,用于处理文件上传和解析逻辑。以下是完整的代码示例:

java 复制代码
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

@RestController
public class FileUploadController {

    private static final Logger logger = LoggerFactory.getLogger(FileUploadController.class);

    @PostMapping("/feeDaysImport")
    public AjaxResult feeDaysImport(@RequestParam("file") MultipartFile file) throws Exception {
        List<DepositInfo> depositInfoList = new ArrayList<>();
        // 校验文件后缀名是否是 txt
        if (file.getOriginalFilename().toLowerCase().endsWith(".txt")) {
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {
                StringBuilder lineAllContent = new StringBuilder();
                String lineContent = "";
                String line;
                while ((line = reader.readLine()) != null) {
                    if (line.contains("USER:") || line.contains("PGM:") || line.contains("CARRIER :")) {
                        continue;
                    }
                    if ("".equals(line.trim())) {
                        if (!lineContent.trim().isEmpty()) {
                            lineAllContent.append(lineContent).append("FINISH");
                            lineContent = "";
                        }
                        continue;
                    } else {
                        lineContent += line + "\n";
                    }
                }
                if (!lineContent.trim().isEmpty()) { // 处理最后一段可能未被追加的内容
                    lineAllContent.append(lineContent).append("FINISH");
                }
                System.out.println("文本全部内容:" + lineAllContent.toString());
                //依照需求解析每行数据
                return AjaxResult.success("操作成功", depositInfoList);
            } catch (Exception e) {
                logger.error("操作失败: " + e.getMessage(), e);
                return AjaxResult.error("操作失败");
            }
        } else {
            logger.error("上传模板格式错误,请上传txt格式文件");
            return AjaxResult.error("上传模板格式错误,请上传txt格式文件");
        }
    }
}

3. 注意事项与优化建议

  • 资源管理 :在这个例子中,我们使用了try-with-resources语句来自动关闭​BufferedReader​,从而避免资源泄露。
  • 日志记录:使用SLF4J进行日志记录,可以帮助我们更好地追踪程序执行过程中的问题。
  • 异常处理:捕获所有可能的异常,并返回有意义的错误消息给客户端。
  • 扩展性:根据实际业务需求,可以进一步扩展此方法以支持更多类型的文件上传和更复杂的文件内容解析逻辑。

通过上述步骤,我们可以轻松地在Spring Boot应用程序中实现文件上传和解析的功能。这不仅提高了开发效率,也为后续维护提供了便利。

相关推荐
西陵16 小时前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
华仔啊16 小时前
这 10 个 MySQL 高级用法,让你的代码又快又好看
后端·mysql
国科安芯16 小时前
AS32S601型MCU芯片电源管理(PMU)模块详解
单片机·嵌入式硬件·性能优化·架构·risc-v
码事漫谈17 小时前
国产时序数据库崛起:金仓凭什么在复杂场景中碾压InfluxDB
后端
上进小菜猪17 小时前
当时序数据不再“只是时间”:金仓数据库如何在复杂场景中拉开与 InfluxDB 的差距
后端
六行神算API-天璇17 小时前
架构思考:大模型作为医疗科研的“智能中间件”
人工智能·中间件·架构·数据挖掘·ar
盖世英雄酱5813618 小时前
springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
java·后端
济南壹软网络科技有限公司18 小时前
企业级盲盒系统:Java高并发架构在多元化抽奖电商中的设计与实践
java·架构·开源源码·盲盒源码·盲盒h5·盲盒app
程序猿DD18 小时前
JUnit 5 中的 @ClassTemplate 实战指南
java·后端
Victor35619 小时前
Netty(14)如何处理Netty中的异常和错误?
后端