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