利用Java實現(xiàn)TXT文件導入功能的示例代碼
引言
在現(xiàn)代Web應用中,文件上傳和處理是一個常見的需求。本文將介紹如何實現(xiàn)一個簡單的TXT文件導入功能,并解析其內(nèi)容以供進一步處理。我們將使用Java后端技術(shù)棧來完成這個任務。
背景
假設(shè)我們有一個業(yè)務場景,需要從TXT文件中導入用戶的免費天數(shù)信息。這些信息可能包含一些不需要的數(shù)據(jù)(如USER:、PGM:等),我們需要過濾掉這些數(shù)據(jù)并解析出有效的信息。
實現(xiàn)步驟
校驗文件類型:首先檢查上傳的文件是否為TXT格式。
讀取文件內(nèi)容:逐行讀取文件內(nèi)容,并過濾掉不需要的行。
解析數(shù)據(jù):根據(jù)業(yè)務規(guī)則解析有效數(shù)據(jù)。
返回結(jié)果:將解析后的數(shù)據(jù)返回給前端。
代碼實現(xiàn)
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"); // 積累有效行內(nèi)容
}
}
String lineAllContent = lineAllContentBuilder.toString();
System.out.println("文本全部內(nèi)容:\n" + lineAllContent);
// 依照需求解析每行數(shù)據(jù)
// 假設(shè)這里有一些解析邏輯...
// 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格式文件");
}
}
// 示例方法,用于模擬數(shù)據(jù)解析過程
private void parseData(String content, List<DepositInfo> depositInfoList) {
// 解析邏輯...
}
}
進入代碼分屏
代碼解釋
1.文件類型校驗:
if (file.getOriginalFilename().toLowerCase().endsWith(".txt"))
我們通過檢查文件名的后綴來確定文件類型是否為TXT。
2.文件讀取與內(nèi)容過濾:
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"); // 積累有效行內(nèi)容
}
}
String lineAllContent = lineAllContentBuilder.toString();
System.out.println("文本全部內(nèi)容:\n" + lineAllContent);
}
使用??BufferedReader??逐行讀取文件內(nèi)容,并過濾掉不需要的行。當遇到空白行時,將積累的有效行內(nèi)容添加到最終的結(jié)果字符串中。
3.數(shù)據(jù)解析:
// 假設(shè)這里有一些解析邏輯... // parseData(lineAllContent, depositInfoList);
在實際項目中,你需要在這里添加具體的解析邏輯,將解析后的數(shù)據(jù)存儲到??depositInfoList??中。
4.異常處理:
catch (Exception e) {
e.printStackTrace();
logger.error("操作失敗:" + e.getMessage());
return AjaxResult.error("操作失敗");
}
捕獲并記錄任何可能發(fā)生的異常,以便于調(diào)試和日志追蹤。
5.返回結(jié)果:
return AjaxResult.success("操作成功", depositInfoList);
將解析后的數(shù)據(jù)封裝到??AjaxResult??對象中并返回給前端。
Java 實現(xiàn)TXT文件上傳
我們將探討如何使用Spring Boot框架實現(xiàn)一個簡單的功能:通過HTTP POST請求上傳TXT文件,并對文件內(nèi)容進行解析。此示例適用于處理包含特定格式數(shù)據(jù)的文本文件,如用戶存款信息等。
添加必要的依賴
首先,確保你的??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>
創(chuàng)建控制器方法
接下來,我們創(chuàng)建一個控制器類,用于處理文件上傳和解析邏輯。以下是完整的代碼示例:
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()) { // 處理最后一段可能未被追加的內(nèi)容
lineAllContent.append(lineContent).append("FINISH");
}
System.out.println("文本全部內(nèi)容:" + lineAllContent.toString());
//依照需求解析每行數(shù)據(jù)
return AjaxResult.success("操作成功", depositInfoList);
} catch (Exception e) {
logger.error("操作失敗: " + e.getMessage(), e);
return AjaxResult.error("操作失敗");
}
} else {
logger.error("上傳模板格式錯誤,請上傳txt格式文件");
return AjaxResult.error("上傳模板格式錯誤,請上傳txt格式文件");
}
}
}
注意事項與優(yōu)化建議
- 資源管理:在這個例子中,我們使用了try-with-resources語句來自動關(guān)閉?
?BufferedReader??,從而避免資源泄露。 - 日志記錄:使用SLF4J進行日志記錄,可以幫助我們更好地追蹤程序執(zhí)行過程中的問題。
- 異常處理:捕獲所有可能的異常,并返回有意義的錯誤消息給客戶端。
- 擴展性:根據(jù)實際業(yè)務需求,可以進一步擴展此方法以支持更多類型的文件上傳和更復雜的文件內(nèi)容解析邏輯。
總結(jié)
本文詳細介紹了如何實現(xiàn)一個簡單的TXT文件導入功能,并解析其內(nèi)容以供進一步處理。
到此這篇關(guān)于利用Java實現(xiàn)TXT文件導入功能的示例代碼的文章就介紹到這了,更多相關(guān)Java TXT文件導入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java集合框架 arrayblockingqueue應用分析
ArrayBlockingQueue是一個由數(shù)組支持的有界阻塞隊列。此隊列按 FIFO(先進先出)原則對元素進行排序。隊列的頭部 是在隊列中存在時間最長的元素2012-11-11

