远离那只蚊子 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
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

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

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?