JAVA导入txt文件并按行读取内容封装成实体以及导出下载

2023-11-05

业务背景:
前台页面支持用户上传txt类型的文件,用做一些服务的配置,我们需求将改文件解析,读取里面的内容,并封装成接口参数,再调第三方接口;

上代码:

   @PostMapping("/uploadHost")
    @RequiresRoles("admin")
    public Result<Boolean> uploadHost(@RequestParam("file") MultipartFile multipartFile) throws Exception {
        if (multipartFile.isEmpty()) {
            throw new FuxiException("文件不能为空");
        }
        //转成file类型
        File file = FileUtils.multipartFileToFile(multipartFile);
        assert file != null;
        InputStreamReader read = null;
        List<TxtEntity>entityList = null;
        try {
           //先读入再放入缓冲流里面按行读取
            read = new InputStreamReader(new FileInputStream(file), "GBK");
            entityList = new ArrayList<>();
            BufferedReader br = new BufferedReader(read);
            String lineTxt;

            while ((lineTxt = br.readLine()) != null) {
            //跳过注释和空行
                if (lineTxt.startsWith("#") || StringUtils.isEmpty(lineTxt)){
                    continue;
                }
                //我这个地方是按空格分割,可以根据自己的业务场景编写规则
                String[] strings = lineTxt.split(" ");
                //封装成实体
                TxtEntity txtEntity = new TxtEntity();
                txtEntity.setIp(strings[0]);
                txtEntity.setHostName(strings[1]);
                if (strings.length > 2){
                    txtEntity.setServer(strings[2]);
                }
                entityList.add(txtEntity);
            }
            if (entityList.isEmpty()){
                return Result.error(500,"文件不能为空");
            }
             //调第三方接口,这里可以写自己的代码逻辑
            Integer result = fuxiInterfaceRestService.hostsImport(entityList);
            if (result == 0) {
                fileManageService.updateFileInfo(BehaviorEnum.HOST);
                return Result.success();
            }
            return Result.error(500,"上传失败");
        } catch (IOException e) {
            log.info(String.format("host文件解析失败 : %s",e.getMessage()));
            throw new IOException("文件解析错误");
        }finally {
            if (read != null){
                read.close();
            }
        }

    }
   /**
     * MultipartFile 转 File
     *
     * @param file
     * @throws Exception
     */
    public static File multipartFileToFile(MultipartFile file) throws Exception {

        File toFile = null;
        if ("".equals(file) || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(Objects.requireNonNull(file.getOriginalFilename()));
            inputStreamToFile(ins, toFile);
            ins.close();
        }
        return toFile;
    }

下载文件:
我直接贴个工具类,可以下载成xml、properties、text文件

package com.ddb.common.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Objects;

/**
 * @Author zqf
 * @Date 2022/7/29 10:11
 * @Description: 文件工具
 */
@Slf4j
public class FileUtils {

    /**
     * MultipartFile 转 File
     *
     * @param file
     * @throws Exception
     */
    public static File multipartFileToFile(MultipartFile file) throws Exception {

        File toFile = null;
        if ("".equals(file) || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(Objects.requireNonNull(file.getOriginalFilename()));
            inputStreamToFile(ins, toFile);
            ins.close();
        }
        return toFile;
    }

    //获取流文件
    private static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 导出xml 需要HttpServletResponse response
     */
    public static void creatAndSendXML(HttpServletResponse response, String fileName, String xml){
        BufferedOutputStream output = null;
        try {
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/x-msdownload");
            response.addHeader("Content-Disposition","attachment;filename="+fileName);
            output = new BufferedOutputStream(response.getOutputStream());
            output.write(xml.getBytes());
            output.flush();   //不可少
            response.flushBuffer();//不可少
        }catch (Exception e){
            e.printStackTrace();
            log.error("导出文件文件出错:{}",e);
        }finally {
            try {
                assert output != null;
                output.close();
            }catch (Exception e){
                log.error("关闭流对象出错 e:{}",e);
                e.printStackTrace();
            }
        }
    }
    /**
     * 导出xml 需要HttpServletResponse response
     */
    public static void creatAndSendYml(HttpServletResponse response, String fileName, String yml){
        BufferedOutputStream output = null;
        try {
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/x-msdownload");
            response.addHeader("Content-Disposition","attachment;filename="+fileName);
            output = new BufferedOutputStream(response.getOutputStream());
            output.write(yml.getBytes());
            output.flush();   //不可少
            response.flushBuffer();//不可少
        }catch (Exception e){
            e.printStackTrace();
            log.error("导出文件文件出错:{}",e);
        }finally {
            try {
                assert output != null;
                output.close();
            }catch (Exception e){
                log.error("关闭流对象出错 e:{}",e);
                e.printStackTrace();
            }
        }
    }


    /**
     * 导出Properties 需要HttpServletResponse response
     */
    public static void exportProperties(HttpServletResponse response, String fileName, String yml){
        BufferedOutputStream output = null;
        try {
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/x-msdownload");
            response.addHeader("Content-Disposition","attachment;filename="+fileName);
            output = new BufferedOutputStream(response.getOutputStream());
            output.write(yml.getBytes());
            output.flush();   //不可少
            response.flushBuffer();//不可少
        }catch (Exception e){
            e.printStackTrace();
            log.error("导出文件文件出错:{}",e);
        }finally {
            try {
                assert output != null;
                output.close();
            }catch (Exception e){
                log.error("关闭流对象出错 e:{}",e);
                e.printStackTrace();
            }
        }
    }
    /**
     * 导出普通文本
     * @param response
     * @param text
     */
    public static void exportTxt(HttpServletResponse response,String text){
        response.setCharacterEncoding("utf-8");
        //设置响应的内容类型
        response.setContentType("text/plain");
        //设置文件的名称和格式  设置名称格式,没有这个中文名称无法显示
        response.addHeader("Content-Disposition","attachment;filename="
                + genAttachmentFileName( "host", "JSON_FOR_UCC_")
                + ".txt");
        BufferedOutputStream buff = null;
        ServletOutputStream outStr = null;
        try {
            outStr = response.getOutputStream();
            buff = new BufferedOutputStream(outStr);
            buff.write(text.getBytes(StandardCharsets.UTF_8));
            buff.flush();
            buff.close();
        } catch (Exception e) {
            log.error("导出文件文件出错:{}",e);
        } finally {try {
            assert buff != null;
            buff.close();
            outStr.close();
        } catch (Exception e) {
            log.error("关闭流对象出错 e:{}",e);
        }
        }
    }


    public static String genAttachmentFileName(String cnName, String defaultName) {
        try {
            cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1");
        } catch (Exception e) {
            cnName = defaultName;
        }
        return cnName;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA导入txt文件并按行读取内容封装成实体以及导出下载 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo

随机推荐

  • R329-opencv阈值分割算法——自适应阈值

    R329 opencv阈值分割算法 自适应阈值 在不均匀照明或者灰度值分布不均的情况下 如果使用全局阈值分割 那么得到的分割效果往往会很不理想 这个时候就要你用到自适应阈值算法了 OpenCV提供了自适应的二值化函数 通过该函数可以对图像的
  • 如何使用网页版微信文件传输助手(图解教程)

    微信文件传输助手网页版是一款非常方便的工具 可以帮助我们在电脑和手机之间传输文件 而且不需要电脑登录微信即可传输文件 下面是具体的操作步骤 步骤一 打开多御浏览器 点击微信文件传输助手 然后使用微信扫描页面上的二维码 即可进入微信传输助手界
  • uniapp开发微信小程序初次加载弹窗显示隐私政策

    效果图 废话不多说 直接上代码
  • 计算机基础第三版知识点总结,计算机基础知识点归纳总结

    计算机等级考试作为当代大学生必考科目之一 它的基础知识点有哪些呢 以下是由出国留学网编辑为大家整理的 计算机基础知识点归纳总结 仅供参考 欢迎大家阅读 计算机基础知识点归纳总结 计算机的发展 类型及其应用领域 1 计算机 computer
  • 智能BI,如今走到了哪一步?

    我们现在需要的不仅是石油 更是如何使用好石油 作者 三七 编辑 皮爷 出品 产业家 错进 错出 这是美国税务局在1963年对数据质量提出的解释 以此来试图表达数据对于计算机处理结果质量的重要性 这一观点的源头来自 计算机之父 查尔斯 巴贝奇
  • 常见erp系统

    ERP系统是提供决策手段的管理平台 很多的企业都有使用 那么常见的ERP系统都有哪些呢 像国内外最常见的ERP系统有鼎捷ERP系列 SAP Oracle 博科 泛普软件 Infor QAD QAD Adaptive 等 鼎捷ERP系统 鼎捷
  • 三种常见DDOS攻击应对策略

    DDos防御需要根据不同的攻击类型和不同的攻击方式指定对应的策略才能达到最有效的防御 常见的DDos包括 Flood CC和反射等 1 flood攻击 Flood类的攻击最常见并简单有效 黑客通过控制大量的肉鸡同时向服务器发起请求 进而达到
  • 一篇文章搞定克拉美罗界(CRB)

    起因 二郎最近在研究LBL 长基线 定位 大部分论文都提到了文中算法获得的方差接近CRB 所以自己的算法性能较好 于是二郎就想知道克拉美罗界是什么意思 以及能应用的场景 经过 1 查文档 克拉美罗界 为无偏估计量的方差确定一个下界 衡量无偏
  • 详细安装配置django

    安装配置使用Django 1 下载安装 django pip install django 2 创建设置项目 先进入要放置项目的文件夹下 2 1 创建项目 django admin startproject Api project 2 2
  • 万兆以太网选择6类线还是6A类线?

    在综合布线中 有些时候必不可免的需要用到万兆铜缆以太网 那么这个时候就会产生一个问题 就是线缆的选型 6类线和6A类线都可以支持到万兆以太网 那么究竟是选择成本较为低廉的6类线还是选择规格更高一些的6A类线缆 6类线与6A类线的区别 起初
  • Cordic算法

    Cordic算法可以利用简单的移位和加减来计算复杂的三角函数 双曲函数 对数 指数等 Cordic算法核心思想有两点 通过已知的角度来逼近输入的角度 用移位来代替tan 已知角度的cos 经过多次积累相乘趋于常数 具体原理如下 根据坐标旋转
  • 怎么委婉的拒绝别人

    其实拒绝别人最难的那个是自己 有心理负担 导致很多人不能说 不 多少次后悔答应别人了 但是也不能没有技巧的拒绝别人 如果没有思考过 那么也会让自己后悔自己做的不合适 方法不对 怎么去拒绝别人呢 需要掌握好技巧和心理分析然后坦然的拒绝别人是这
  • 关于Mybatis一对多查询以及返回一条记录的经验总结

    前人经验 关于一对多返回一条的问题 原因是在于多张表有列名相同的字段 如果在数据库中使用连接操作 如 INNER JOIN LEFT JOIN RIGHT JOIN 等 进行连接时 列名有相同的字段 则在连接结果集中 这些列名相同的字段会被
  • c:forEach status.index 行索引的使用

    使用seam做了个项目 展示一个自定义列表输出 分别定义表格标题List headerList和数据List
  • 浅谈云计算的三种服务模式:IaaS,PaaS和SaaS

    2008年 云计算的概念由Google率先提出 短时间内其核心理念在全球范围内迅速传播并发展 2010年在国内形成趋势 各大IT互联网商业巨头将目光聚焦在云计算 至目前 云计算在中国已经慢慢开始成熟起来 云计算指的是通过网络 云 将巨大的数
  • python从入门到精通——完整教程【转载】

    文章目录 一 pycharm下载安装 二 python下载安装 三 pycharm上配置python 四 配置镜像源让你下载嗖嗖的快 4 1 pycharm内部配置 4 2 手动添加镜像源 4 3 永久配置镜像源 五 插件安装 比如汉化 5
  • ios逆向(二)frida-ios-dump一键砸壳详细版

    写在前面 本教程为本人实际操作记录 在此感谢庆哥官方 一条命令完成砸壳 github frida ios dump ios端配置 打开cydia 添加源 https build frida re 打开刚刚添加的源 安装 frida 安装完成
  • 注册表关闭windows安全中心_关闭win10自动更新的三个小妙招,再也不用被自动下载更新打扰了...

    对于Windows 10操作系统 微软默认设置为自动下载并安装Windows 以确保系统正常运行并保持其安全性 但是在某些情况下 需要关闭Windows 10更新或在Windows 10上禁用自动更新安装 这该如何办呢 本文目录 关于Win
  • Linux系统中文件查找find函数用法

    find name april 在当前目录下查找以april开始的文件 find name april fprint file 在当前目录下查找以april开始的文件 并把结果输出到file中 find name ap o name may
  • JAVA导入txt文件并按行读取内容封装成实体以及导出下载

    业务背景 前台页面支持用户上传txt类型的文件 用做一些服务的配置 我们需求将改文件解析 读取里面的内容 并封装成接口参数 再调第三方接口 上代码 PostMapping uploadHost RequiresRoles admin pub