利用Java实现TXT文件导入功能的示例代码

 更新时间:2025年08月31日 09:20:12   作者:自由的疯  
在现代Web应用中,文件上传和处理是一个常见的需求,本文将介绍如何实现一个简单的TXT文件导入功能,文中的示例代码简洁易懂,需要的小伙伴可以了解下

引言

在现代Web应用中,文件上传和处理是一个常见的需求。本文将介绍如何实现一个简单的TXT文件导入功能,并解析其内容以供进一步处理。我们将使用Java后端技术栈来完成这个任务。

背景

假设我们有一个业务场景,需要从TXT文件中导入用户的免费天数信息。这些信息可能包含一些不需要的数据(如USER:、PGM:等),我们需要过滤掉这些数据并解析出有效的信息。

实现步骤

校验文件类型:首先检查上传的文件是否为TXT格式。

读取文件内容:逐行读取文件内容,并过滤掉不需要的行。

解析数据:根据业务规则解析有效数据。

返回结果:将解析后的数据返回给前端。

代码实现

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

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

public class DepositController {

    @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 lineAllContentBuilder = new StringBuilder();
                StringBuilder lineContentBuilder = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    if (line.contains("USER:") || line.contains("PGM:") || line.contains("CARRIER :")) {
                        continue; // 过滤掉不需要的行
                    }
                    if ("".equals(line) || line.trim().length() == 0) {
                        if (lineContentBuilder.length() > 0) {
                            lineAllContentBuilder.append(lineContentBuilder).append("FINISH\n");
                            lineContentBuilder.setLength(0); // 清空StringBuilder
                        }
                        continue;
                    } else {
                        lineContentBuilder.append(line).append("\n"); // 积累有效行内容
                    }
                }

                String lineAllContent = lineAllContentBuilder.toString();
                System.out.println("文本全部内容:\n" + lineAllContent);

                // 依照需求解析每行数据
                // 假设这里有一些解析逻辑...
                // parseData(lineAllContent, depositInfoList);

                return AjaxResult.success("操作成功", depositInfoList);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("操作失败:" + e.getMessage());
                return AjaxResult.error("操作失败");
            }
        } else {
            logger.error("上传模板格式错误,请上传txt格式文件");
            return AjaxResult.error("上传模板格式错误,请上传txt格式文件");
        }
    }

    // 示例方法,用于模拟数据解析过程
    private void parseData(String content, List<DepositInfo> depositInfoList) {
        // 解析逻辑...
    }
}

进入代码分屏

代码解释

1.文件类型校验

if (file.getOriginalFilename().toLowerCase().endsWith(".txt"))

我们通过检查文件名的后缀来确定文件类型是否为TXT。

2.文件读取与内容过滤

try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {
    StringBuilder lineAllContentBuilder = new StringBuilder();
    StringBuilder lineContentBuilder = new StringBuilder();
    String line;

    while ((line = reader.readLine()) != null) {
        if (line.contains("USER:") || line.contains("PGM:") || line.contains("CARRIER :")) {
            continue; // 过滤掉不需要的行
        }
        if ("".equals(line) || line.trim().length() == 0) {
            if (lineContentBuilder.length() > 0) {
                lineAllContentBuilder.append(lineContentBuilder).append("FINISH\n");
                lineContentBuilder.setLength(0); // 清空StringBuilder
            }
            continue;
        } else {
            lineContentBuilder.append(line).append("\n"); // 积累有效行内容
        }
    }

    String lineAllContent = lineAllContentBuilder.toString();
    System.out.println("文本全部内容:\n" + lineAllContent);
}

使用​​BufferedReader​​逐行读取文件内容,并过滤掉不需要的行。当遇到空白行时,将积累的有效行内容添加到最终的结果字符串中。

3.数据解析

// 假设这里有一些解析逻辑...
// parseData(lineAllContent, depositInfoList);

在实际项目中,你需要在这里添加具体的解析逻辑,将解析后的数据存储到​​depositInfoList​​中。

4.异常处理

catch (Exception e) {
    e.printStackTrace();
    logger.error("操作失败:" + e.getMessage());
    return AjaxResult.error("操作失败");
}

捕获并记录任何可能发生的异常,以便于调试和日志追踪。

5.返回结果

return AjaxResult.success("操作成功", depositInfoList);

将解析后的数据封装到​​AjaxResult​​对象中并返回给前端。

Java 实现TXT文件上传

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

添加必要的依赖

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

<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>

创建控制器方法

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

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格式文件");
        }
    }
}

注意事项与优化建议

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

总结

本文详细介绍了如何实现一个简单的TXT文件导入功能,并解析其内容以供进一步处理。

到此这篇关于利用Java实现TXT文件导入功能的示例代码的文章就介绍到这了,更多相关Java TXT文件导入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中JSON数值溢出问题的处理方案

    SpringBoot中JSON数值溢出问题的处理方案

    SpringBoot接口因JSON数值超出int范围报错,解决方案为:将字段改为Long、全局异常处理返回友好提示、添加数据校验,推荐使用Long存储大数值,避免溢出,本文通过代码讲解的非常详细,需要的朋友可以参考下
    2025-08-08
  • IDEA下使用Spring Boot热加载的实现

    IDEA下使用Spring Boot热加载的实现

    本文主要介绍了IDEA下使用Spring Boot热加载的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • idea中使用Inputstream流导致中文乱码解决方法

    idea中使用Inputstream流导致中文乱码解决方法

    很多朋友遇到一个措手不及的问题当idea中使用Inputstream流导致中文乱码及Java FileInputStream读中文乱码问题,针对这两个问题很多朋友不知道该如何解决,下面小编把解决方案分享给大家供大家参考
    2021-05-05
  • mybatis中的mapper.xml使用循环语句

    mybatis中的mapper.xml使用循环语句

    这篇文章主要介绍了mybatis中的mapper.xml使用循环语句,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 很详细的Log4j配置步骤

    很详细的Log4j配置步骤

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。
    2008-11-11
  • 详谈@Cacheable不起作用的原因:bean未序列化问题

    详谈@Cacheable不起作用的原因:bean未序列化问题

    这篇文章主要介绍了@Cacheable不起作用的原因:bean未序列化问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 使用Java高效将CSV转换为Excel的实现方法

    使用Java高效将CSV转换为Excel的实现方法

    在日常的数据处理和分析工作中,CSV文件因其轻量级和通用性而广受欢迎,然而,当我们需要进行复杂的数据分析或利用Excel强大的图表和公式功能时,将CSV数据转换为Excel文件就成了开发者们常见的需求和痛点,本文将深入探讨如何利用Java高效地将CSV转换为Excel
    2025-08-08
  • java实现TCP socket和UDP socket的实例

    java实现TCP socket和UDP socket的实例

    这篇文章主要介绍了本文主要介绍了java实现TCP socket和UDP socket的实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Springboot整合logback的详细教程

    Springboot整合logback的详细教程

    这篇文章主要介绍了Springboot整合logback的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • java8列表中通过stream流根据对象属性去重的三种方式

    java8列表中通过stream流根据对象属性去重的三种方式

    这篇文章主要介绍了java8列表中通过stream流根据对象属性去重的三种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论