JAVA导出Excel、TXT、批量导出ZIP

目标

实现JAVA导出Excel、TXT、批量导出ZIP文件。

知识点

1.字节流与字符流

区别:

读写单位:顾名思义,字节流以字节(byte)为读写单位,而字符流以字符为读写单位,根据码表映射字符,一次可能读入多个字符。
处理对象:字节流可以处理所有类型的数据(包括图片等),而字符流只能处理字符类型的纯文本数据。
字节流:一次写入或读出8位二进制。
字符流:一次写入或读出至少8位二进制。不同的字符所占的字节是不同的。

ASCII码:
一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。

UTF-8编码:
一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

Unicode编码:
一个英文等于两个字节,一个中文(含繁体)等于两个字节。

2.简述页面导出文件的逻辑(直接导出TXT,一般读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中)

  • 设置reponse响应
  • 获取输出流response.getOutputStream();
  • 将文件内容以字节流形式写入
  • 清空缓存区数据,把缓冲区的数据强行输出 flush()
  • 关闭输出流
/* 导出txt文件
	 * @author	
	 * @param	response
	 * @param	text 要导出的字符串
	 * @return
	 */
	public void exportTxt(HttpServletResponse response,String text){
   
		response.setCharacterEncoding("utf-8");
        //设置响应的内容类型
        response.setContentType("text/plain");
        //设置文件的名称和格式
        response.addHeader("Content-Disposition","attachment;filename="
        					+ new String(("文件中文名称").getBytes("gb2312"),"iso8859-1")//设置名称格式,没有这个中文名称无法显示
                        + ".txt");
        BufferedOutputStream buff = null;
        ServletOutputStream outStr = null;
        try {
   
            outStr = response.getOutputStream();
            buff = new BufferedOutputStream(outStr);
            buff.write(text.getBytes("UTF-8"));
            buff.flush();
            buff.close();
        } catch (Exception e) {
   
            //LOGGER.error("导出文件文件出错:{}",e);
        } finally {
   try {
   
                buff.close();
                outStr.close();
            } catch (Exception e) {
   
                //LOGGER.error("关闭流对象出错 e:{}",e);
            }
        }
	}

java页面导出TXT
SSM框架下导出TXT,参考【SSM框架, 导出TXT

3. 一些类

  • BufferedInputStream: 输入缓冲流:先从磁盘中将要读取的内容放入到内存中,再一次性从内存中取出来,避免了读一段取一段;(未使用) 构造需基于outputStream
public void readFileWithBufferedStream(String srcPath, int size) {
   
        InputStream inputStream = null;
        BufferedInputStream bufferedInputStream = null;
        StringBuffer sb = new StringBuffer();
        try {
   
            inputStream = new FileInputStream(srcPath);
            bufferedInputStream = new BufferedInputStream(inputStream);
            byte[] byteArr = new byte[size];
            int len = 0;
            while ((len = bufferedInputStream.read(byteArr)) != -1) {
   
                sb.append(new String(byteArr), 0, len);
            }
            System.out.println(sb);
        } catch (FileNotFoundException e) {
   
            e.printStackTrace();
        } catch (IOException e) {
   
            e.printStackTrace();
        } 
    }
  • BufferedOutputStream: 输出缓冲流:先将要输出的内容放入到内存中,再一次性全都输出。构造需基于outputStream
    public void writeFileWithBufferedStream(String content, String destPath) {
   
        OutputStream outputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try {
   
            // 下面的语句中,如果destPath中的目录不存在,不会自动创建目录,因此,建议使用下面的代码
            // outputStream = new FileOutputStream(destPath);
       // 前提是输出的路径是"/"而不是"\\"
            File tmp = new File(destPath.substring(0, destPath.lastIndexOf("/")));
            if(!tmp.exists()){
   
                tmp.mkdirs();
            }
            outputStream = new FileOutputStream(destPath);
            bufferedOutputStream = new BufferedOutputStream(outputStream);

            byte[] byteArr = content.getBytes();
            bufferedOutputStream.write(byteArr);
            bufferedOutputStream.flush();
        } catch (FileNotFoundException e) {
   
            e.printStackTrace();
        } catch (IOException e) {
   
            e.printStackTrace
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值