最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Java實現(xiàn)TXT文件導(dǎo)入功能的示例代碼

 更新時間:2025年08月31日 09:20:12   作者:自由的瘋  
在現(xiàn)代Web應(yīng)用中,文件上傳和處理是一個常見的需求,本文將介紹如何實現(xiàn)一個簡單的TXT文件導(dǎo)入功能,文中的示例代碼簡潔易懂,需要的小伙伴可以了解下

引言

在現(xiàn)代Web應(yīng)用中,文件上傳和處理是一個常見的需求。本文將介紹如何實現(xiàn)一個簡單的TXT文件導(dǎo)入功能,并解析其內(nèi)容以供進一步處理。我們將使用Java后端技術(shù)棧來完成這個任務(wù)。

背景

假設(shè)我們有一個業(yè)務(wù)場景,需要從TXT文件中導(dǎo)入用戶的免費天數(shù)信息。這些信息可能包含一些不需要的數(shù)據(jù)(如USER:、PGM:等),我們需要過濾掉這些數(shù)據(jù)并解析出有效的信息。

實現(xiàn)步驟

校驗文件類型:首先檢查上傳的文件是否為TXT格式。

讀取文件內(nèi)容:逐行讀取文件內(nèi)容,并過濾掉不需要的行。

解析數(shù)據(jù):根據(jù)業(yè)務(wù)規(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)容,并過濾掉不需要的行。當(dāng)遇到空白行時,將積累的有效行內(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è)務(wù)需求,可以進一步擴展此方法以支持更多類型的文件上傳和更復(fù)雜的文件內(nèi)容解析邏輯。

總結(jié)

本文詳細介紹了如何實現(xiàn)一個簡單的TXT文件導(dǎo)入功能,并解析其內(nèi)容以供進一步處理。

到此這篇關(guān)于利用Java實現(xiàn)TXT文件導(dǎo)入功能的示例代碼的文章就介紹到這了,更多相關(guān)Java TXT文件導(dǎo)入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中JSON數(shù)值溢出問題的處理方案

    SpringBoot中JSON數(shù)值溢出問題的處理方案

    SpringBoot接口因JSON數(shù)值超出int范圍報錯,解決方案為:將字段改為Long、全局異常處理返回友好提示、添加數(shù)據(jù)校驗,推薦使用Long存儲大數(shù)值,避免溢出,本文通過代碼講解的非常詳細,需要的朋友可以參考下
    2025-08-08
  • IDEA下使用Spring Boot熱加載的實現(xiàn)

    IDEA下使用Spring Boot熱加載的實現(xiàn)

    本文主要介紹了IDEA下使用Spring Boot熱加載的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • idea中使用Inputstream流導(dǎo)致中文亂碼解決方法

    idea中使用Inputstream流導(dǎo)致中文亂碼解決方法

    很多朋友遇到一個措手不及的問題當(dāng)idea中使用Inputstream流導(dǎo)致中文亂碼及Java FileInputStream讀中文亂碼問題,針對這兩個問題很多朋友不知道該如何解決,下面小編把解決方案分享給大家供大家參考
    2021-05-05
  • mybatis中的mapper.xml使用循環(huán)語句

    mybatis中的mapper.xml使用循環(huán)語句

    這篇文章主要介紹了mybatis中的mapper.xml使用循環(huán)語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 很詳細的Log4j配置步驟

    很詳細的Log4j配置步驟

    Log4J的配置文件(Configuration File)就是用來設(shè)置記錄器的級別、存放器和布局的,它可接key=value格式的設(shè)置或xml格式的設(shè)置信息。通過配置,可以創(chuàng)建出Log4J的運行環(huán)境。
    2008-11-11
  • 詳談@Cacheable不起作用的原因:bean未序列化問題

    詳談@Cacheable不起作用的原因:bean未序列化問題

    這篇文章主要介紹了@Cacheable不起作用的原因:bean未序列化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 使用Java高效將CSV轉(zhuǎn)換為Excel的實現(xiàn)方法

    使用Java高效將CSV轉(zhuǎn)換為Excel的實現(xiàn)方法

    在日常的數(shù)據(jù)處理和分析工作中,CSV文件因其輕量級和通用性而廣受歡迎,然而,當(dāng)我們需要進行復(fù)雜的數(shù)據(jù)分析或利用Excel強大的圖表和公式功能時,將CSV數(shù)據(jù)轉(zhuǎn)換為Excel文件就成了開發(fā)者們常見的需求和痛點,本文將深入探討如何利用Java高效地將CSV轉(zhuǎn)換為Excel
    2025-08-08
  • java實現(xiàn)TCP socket和UDP socket的實例

    java實現(xiàn)TCP socket和UDP socket的實例

    這篇文章主要介紹了本文主要介紹了java實現(xiàn)TCP socket和UDP socket的實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Springboot整合logback的詳細教程

    Springboot整合logback的詳細教程

    這篇文章主要介紹了Springboot整合logback的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • java8列表中通過stream流根據(jù)對象屬性去重的三種方式

    java8列表中通過stream流根據(jù)對象屬性去重的三種方式

    這篇文章主要介紹了java8列表中通過stream流根據(jù)對象屬性去重的三種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

庆城县| 惠东县| 宣威市| 射阳县| 高尔夫| 鹤岗市| 水富县| 鸡东县| 得荣县| 理塘县| 宁城县| 砚山县| 南川市| 新平| 荣成市| 东安县| 新兴县| 尼玛县| 观塘区| 莫力| 井陉县| 辽阳县| 涡阳县| 微山县| 黄山市| 茶陵县| 新泰市| 航空| 宽城| 长子县| 永和县| 大荔县| 阳春市| 金昌市| 三门县| 宁陕县| 泰州市| 莎车县| 沙坪坝区| 辽宁省| 日土县|