远离那只蚊子 2019-05-30 18:14 采纳率: 0%
浏览 255

java web 多线程下载文件的问题。

**当我开启多线程下载文件时,outputstream.write 报 空指针 错误。 大佬们帮我看看
**

 ExecutorService executorService = Executors.newCachedThreadPool();
        executorService.execute(
                new Runnable() {
                    @Override
                    public void run() {
                        String path=System.getProperty("catalina.home")+"/webapps/uploadFiles/njhb/areaFiles/南京市/"+fileName;
                        final File file  = new File(path);
                        if(!file.exists()){
                            System.out.println("文件不存在");
                            //response.setHeader("content-type", "text/html;charset=UTF-8");
                            response.setContentType("text/html;charset=UTF-8");
                            PrintWriter writer = null;
                            try {
                                writer = response.getWriter();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            writer.write("文件不存在!");
                            return;
                        }
                        response.reset();
                        response.setCharacterEncoding("UTF-8");
                        response.setContentType("multipart/form-data");
                        response.setHeader("Content-Disposition",
                                "attachment;fileName="+ encodingFileName(fileName));
                        response.setHeader("Set-Cookie", "fileDownload=true; path=/;" +
                                "attachment;fileName=" + encodingFileName(fileName));

                        try {
                            //打开本地文件流
                            InputStream inputStream = new FileInputStream(file);
                            //激活下载操作
                            OutputStream outputStream = response.getOutputStream();

                            //循环写入输出流  每次读取2048  一直读完
                            byte[] b = new byte[2048];
                            int length;
                            int count=0;
                            while ((length = inputStream.read(b)) > 0) {
                                System.out.println("b: "+b+"     length: "+length);
                                outputStream.write(b, 0, length);
                                count++;
                            }

                            // 这里主要关闭。
                            outputStream.close();
                            inputStream.close();





                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                            logg.info("文件下载终止!!!");
                        }
                    }
                }
        );

下面是报错信息!!

图片说明

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-21 11:59
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问