CSV导出(通过读取数据字节流直接上传文件到服务器)

这篇具有很好参考价值的文章主要介绍了CSV导出(通过读取数据字节流直接上传文件到服务器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件上传服务器

文件之前读取大多数都是用前端点击相应传入后端,通过HttpServletResponse response得输入输出流进行导入导入导出数据。

近期碰到得需求是定时查询数据库数据并通过csv文件上传至系统。所以不能使用HttpServletResponse,因为对应文件流比较熟悉所以最开始使用文件流进行读写数据。

思路:将数据查出来,创建本地文件,在将数据一行一行写入,在读取本地文件获取输入流上传到服务器上后在把本地生成的文件删掉。

代码演示:

 @Override
    public void userInfo(BaseRequest<QueryUserReq> baseRequest) {
        UserDto userDto1 = new UserDto();
        List<UserDto> data = userAtom.selectByExample(userDto1);
        String[] titles = new String[]{"ID","姓名"};
        String[] propertys = new String[]{"userNo","userName"};


        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        DataOutputStream outputStream = new DataOutputStream(stream);
        for(Object obj : data){
            //利用反射获取所有字段
            Field[] fields = obj.getClass().getDeclaredFields();
            for(String property : propertys){
                for(Field field : fields){
                    //设置字段可见性
                    field.setAccessible(true);
                    if(property.equals(field.getName())){

                        try {
                            outputStream.write(field.get(obj).toString().getBytes("gbk"));
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }

                        try {
                            outputStream.writeBytes(",");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        continue;
                    }
                }
            }

            //写完一行换行
            try {
                outputStream.write("\r\n".getBytes("gbk"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        Integer curDt = busiDateService.viewBusiDate().getWorkday();
        byte dataStream[] = new byte[1024];
         UploadFileReq uploadFileReq = new UploadFileReq();
            //设置文件名称
           uploadFileReq.setFileName(Constant.FILE_NAME_PREFX+curDt+ Constant.FILE_NAME_SUFFIX);

                //业务类型
                uploadFileReq.setBusiType("userInfo");
                uploadFileReq.setIsUploadOutside("1");

                uploadFileReq.setContent(stream.toByteArray());
                //上传到服务器
                Long attachId = attachService.uploadFile(uploadFileReq);
                 }

}

写入删除

 @Override
    public void userInfo(BaseRequest<QueryUserReq> baseRequest) {
        UserDto userDto1 = new UserDto();
        List<UserDto> data = userAtom.selectByExample(userDto1);
        String[] titles = new String[]{"ID","姓名"};
        String[] propertys = new String[]{"userNo","userName"};
         Integer curDt = busiDateService.viewBusiDate().getWorkday();
        //配置路径
        String localDirPath = "E:\\";

        String fileName = localDirPath+Constant.FILE_NAME_PREFX+curDt+ Constant.FILE_NAME_SUFFIX;
        try {
            ExportCsv.exportCsv(titles,propertys, data,fileName);
        } catch (IOException e) {
            e.printStackTrace();
      } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
         FileInputStream inputStream = new FileInputStream(fileName);


                inputStream.read(dataStream);
          UploadFileReq uploadFileReq = new UploadFileReq();
                uploadFileReq.setFileName(FabBankAcptConstant.FILE_NAME_PREFX+curDt+ FabBankAcptConstant.FILE_NAME_SUFFIX);

                //上传到服务器
                Long attachId = attachService.uploadFile(uploadFileReq);
           inputStream.close();

        Path path = Paths.get(fileName);
       try {
            //删除生成的文件
            boolean result = Files.deleteIfExists(path);
        } catch (IOException e) {
            e.printStackTrace();
        }

csv导出工具类

public class ExportCsv {
    public static <T> String exportCsv(String[] titles, String[] propertys, List<T> list,String fileName) throws IOException, IllegalArgumentException, IllegalAccessException{
        File file = new File(fileName);
        //构建输出流,同时指定编码
        OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(file), "gbk");

        //csv文件是逗号分隔,除第一个外,每次写入一个单元格数据后需要输入逗号
        for(String title : titles){
            ow.write(title);
            ow.write(",");
        }
        //写完文件头后换行
        ow.write("\r\n");
        //写内容
        for(Object obj : list){
            //利用反射获取所有字段
            Field[] fields = obj.getClass().getDeclaredFields();
            for(String property : propertys){
                for(Field field : fields){
                    //设置字段可见性
                    field.setAccessible(true);
                    if(property.equals(field.getName())){
                        ow.write(field.get(obj).toString());
                        ow.write(",");
                        continue;
                    }
                }
            }
            //写完一行换行
            ow.write("\r\n");
        }
        ow.flush();
        ow.close();
        return "0";
    }
}

显然这么写多了一个没用的步骤,然后准备将查出来的数据直接转成字节流进行传递,这里要注意DataOutputStream容易出现乱码,所以使用时候一定要设置好编码例如:outputStream.write("内容".getBytes("gbk"));

 @Override
    public void userInfo(BaseRequest<QueryUserReq> baseRequest) {
        UserDto userDto = new UserDto();
        //查出对应数据
        List<UserDto> list = userAtom.selectByExample(userDto);
        ArrayList<TaskUserInfoDto> data = UserInfoTaskUtil.userInfoDtosToTaskInfo(list);
        Integer curDt = busiDateService.viewBusiDate().getWorkday();
        String[] propertys = new String[]{"appName","loginID"};

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        DataOutputStream outputStream = new DataOutputStream(stream);
        String[] titles = new String[]{"AppName","LoginID"};
        for (int i = 0; i < titles.length; i++) {
            try {
                outputStream.write(titles[i].getBytes("gbk"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (i != titles.length-1){
                try {
                    outputStream.write("|".getBytes("gbk"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        try {
            outputStream.write(System.getProperty("line.separator").getBytes("gbk"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        for(Object obj : data){
            //利用反射获取所有字段
            Field[] fields = obj.getClass().getDeclaredFields();
            for(String property : propertys){
                for(Field field : fields){
                    //设置字段可见性
                    field.setAccessible(true);
                    if(property.equals(field.getName())){

                        try {
                            if (field.get(obj)!=null){
                                if (!StringUtils.isEmpty(field.get(obj).toString())){
                                    if (!field.get(obj).toString().equals("null")){
                                        outputStream.write(field.get(obj).toString().getBytes("gbk"));
                                    }
                                }

                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }

                        try {
                            if (!property.equals("accountStatus")){
                                outputStream.writeBytes("|");
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        continue;
                    }
                }
            }
            //写完一行换行
            try {
                outputStream.write(System.getProperty("line.separator").getBytes("gbk"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        byte dataStream[] = new byte[1024];

                UploadFileReq uploadFileReq = new UploadFileReq();
            uploadFileReq.setFileName(FabBankAcptConstant.FILE_NAME_PREFX+curDt+ FabBankAcptConstant.FILE_NAME_SUFFIX);
                //业务类型
                uploadFileReq.setBusiType("userInfo");
                uploadFileReq.setIsUploadOutside("1");
                uploadFileReq.setContent(stream.toByteArray());
                Long attachId = attachService.uploadFile(uploadFileReq);
    }

csv导出,OutputStream,文件上传,excel导出,csv导出,字节流

 最后通过字节流便可直接上传到服务器。文章来源地址https://www.toymoban.com/news/detail-525198.html

到了这里,关于CSV导出(通过读取数据字节流直接上传文件到服务器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 读取CSV文件数据

    1.1 CSV文件: 纯文本文件,存储空间占用小,其内容一般默认用逗号分隔,可用记事本和EXCEL打开、编辑。 读取CSV文件内容可用pandas模块中的read_csv()函数。 1.2 read_csv()函数的语法(选取部分主要参数): pandas.read_csv(filepath_or_buffer,sep,header,names,index_col,usecols,nrows,encodi

    2024年02月07日
    浏览(55)
  • 如何用示波器导出csv数据

    要保存示波器的波形数据,需要将数据保存为csv格式,便于matlab读取波形和还原波形,或者绘制出波形,理论上你示波器能存多少数据,matlab都能分析, 进行时域分析或者频域分析 ,今天我就来讲一下如何用示波器导出csv数据,需要准备的硬件如下: 泰克/普源示波器 

    2024年02月07日
    浏览(48)
  • pandas(九) 数据读取-读取csv、excle、txt、mysql数据

    一、Pandas需要先读取表格类型的数据,然后进行分析 数据类型 说明 读取方法 CSV. tsV. txt 用逗号分隔、tab分割的纯文本文件 pd.read_csv excel xls、xlsx文件 pd.read_excel mysql 关系型数据库表 pd.read_sql 二、Pandas 读取数据 数据资料:https://grouplens.org/datasets/movielens/ 读取CSV, 使用默认的

    2024年02月12日
    浏览(65)
  • JS读取本地CSV文件数据

    文件中的部分数据如图 需求是需要提取出文件的数据 使用到的模块是 Papa Parse yarn add papaparse papaparse 的基本使用可以参考官方demo 首先需要注意, papaparse 解析本地文件, 需要的文件格式是从 DOM 中获得的 File 对象, 不能直接使用 require() 导入文件 以下方法直接导入是不可行的

    2024年02月07日
    浏览(46)
  • Java快速导出数据(List)到CSV文件

    👏作者简介:大家好,我是Rockey,不知名企业的不知名Java开发工程师 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝联系方式:he18339193956,加我进群,大家一起学习,一起读书,一起对抗互联网寒冬👀 Java快速导出数据(List)到CSV文件,实际上是使用

    2024年02月14日
    浏览(43)
  • Jmeter读取CSV文件数据并使用

    1、准备CSV文件数据   2、在新建的线程组下添加:  CSV 数据文件设置   ,根据需要设置字段,其中 变量名称 根据CSV中字段列来填写 3、设置好CSV数据文件设置后,可以在取样器中使用,根据设置的变量名称来取值 4、通过 察看结果树,可以查看取值是否正确   5、若CSV文件

    2024年02月16日
    浏览(37)
  • selenium自动化测试读取csv数据

    1.定义读取数据: configFile py文件: class Config: 2.调用读取方法获得内容并使用

    2024年03月15日
    浏览(38)
  • postgis数据库导出csv表再导入postgis

    直接拖过去 再导入postgis数据库中

    2024年02月10日
    浏览(49)
  • Django中利用Admin后台实现Excel/CSV的导入更新数据库和导出数据到Excel/CSV

    本文基于Django自带的admin 后台实现Excel,csv,Json等格式文件的导入并更新后台数据库。 核心是引入 django-import-export 模块。 我们先创建一个app:app01 python manage.py startapp app01 然后在app01文件夹下的models.py 中写入如下模型数据: 指定清华镜像会快很多 修改两处: 注册import_exp

    2023年04月09日
    浏览(48)
  • 读取csv数据到词云图并保存图片

    要用的第三方库 pyecharts snap_selenium pandas 用snap_selenium中的snapshot,但是snapshot,只支持Chrome,和Safari 而我用的edge,但是我有msedgedriver,以前写selenium爬虫的时候,驱动edge。 所以,我决定偷梁换柱,把snapshot的源码中的Chrome给改了。 😆😆😆😆 看源码 偷梁换柱 可以驱动,小操

    2024年02月06日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包