利用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文件导入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java IP地址网段计算的示例代码

    java IP地址网段计算的示例代码

    这篇文章主要介绍了java IP地址网段计算的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Java Socket编程实例(二)- UDP基本使用

    Java Socket编程实例(二)- UDP基本使用

    这篇文章主要讲解Java Socket编程中UDP的基本使用,希望能给大家做一个参考。
    2016-06-06
  • Java超详细大文件分片上传代码

    Java超详细大文件分片上传代码

    文件上传是一个很常见的功能。在项目开发过程中,我们通常都会使用一些成熟的上传组件来实现对应的功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-06-06
  • 使用Netty进行编解码的操作过程详解

    使用Netty进行编解码的操作过程详解

    这篇文章主要介绍了使用Netty进行编解码的操作过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • SpringMVC底层执行流程及原理解析

    SpringMVC底层执行流程及原理解析

    这篇文章主要介绍了SpringMVC底层执行流程及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 使用idea开发Servlet详细图文教程

    使用idea开发Servlet详细图文教程

    这篇文章主要给大家介绍了关于使用idea开发Servlet的相关资料,将idea添加servlet的过程其实非常简单,只需要按照以下几个步骤即可完成,需要的朋友可以参考下
    2023-10-10
  • Java并发Timer源码分析

    Java并发Timer源码分析

    这篇文章讲述了java并发编程的相关知识点,并通过Timer源码分析更深入的讲解了java并发编程。
    2018-07-07
  • java集合框架 arrayblockingqueue应用分析

    java集合框架 arrayblockingqueue应用分析

    ArrayBlockingQueue是一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素
    2012-11-11
  • Jrebel启动失败解决方案详解

    Jrebel启动失败解决方案详解

    这篇文章主要介绍了Jrebel启动失败解决方案详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 从0开始教你开发一个springboot应用

    从0开始教你开发一个springboot应用

    这篇文章主要为大家介绍了从0开始开发一个springboot应用教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论