「java文件下载进度监控」java实现下载进度条

博主:adminadmin 2023-01-21 05:48:16 336

今天给各位分享java文件下载进度监控的知识,其中也会对java实现下载进度条进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java FTP下载文件在代码中如何实现知道下载完成?

public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){

try {

String ftpHost = kmConfig.getFtpHost();

int port = kmConfig.getFtpPort();

String userName = kmConfig.getFtpUser();

String passWord = kmConfig.getFtpPassword();

String path = kmConfig.getFtpPath();

FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。

ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码

ftpClient.binary();

ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。

try {

TelnetInputStream in = ftpClient.get(fileName);

byte[] bytes = new byte[1024];

int cnt=0;

while ((cnt=in.read(bytes,0,bytes.length)) != -1) {

outputStream.write(bytes, 0, cnt);

}

//##############################################

//这里文件就已经下载完了,自己理解一下

//#############################################

outputStream.close();

in.close();

} catch (Exception e) {

ftpClient.closeServer();

e.printStackTrace();

}

ftpClient.closeServer();

} catch (Exception e) {

System.out.println("下载文件失败!请检查系统FTP设置,并确认FTP服务启动");

}

}

请问一个java的文件下载的问题,为什么我的下载每次都看不到进度条,而是一下子就下好了呢?

建立新的线程来处理下载。去看Thread的API有详细说明。例如本来是:

downloading();

System.out.println("下载完成");

就改成:

class DownloadListener {//这个class自己找个地方放。

public void downloadInProgress(double percent) {

System.out.println("已下载" + percent);

}

public void downloadCompleted() {

System.out.println("已下载完成");

}

}

//从这里开始应该被改成的内容

DownloadListener downloadListener = new DownloadListener();

new Thread() {

public void run() { //这里写第二线程的内容

downloading(downloadListener);//于是downloadListener被传入了downloading函数,就可以在downloading函数内部通过呼叫downloadListener的downloadInProgress和downloadCompleted来通知第一线程下载情况。

}

}.start(); //第一线程会在这里启动第二线程,然后不管第二线程执行了什么是否完成,直接执行下一句。

System.out.println("第二线程已经启动");

//例子里很多System.out.println是为了简明。实际情况一般是修改一个给用户看的状态栏JLabel,这里下载进行中时,应该是更新一个JProgressBar。

java线程实现下载,中间中断怎么记录下载的进度,并在下次任务中接着前边下载?

下载的文件大小就是下次开始的位置

不过一般下载软件都有自己的下载列表文件用来记录这些

Java 如何监控文件目录的变化

JavaSE 1.7提供了相关的API,去监视文件或者文件夹的变动,主要的API都在java.nio.file下面,其大概流程如下:

package org.xdemo.superutil.j2se.filewatch;

 

import static java.nio.file.LinkOption.NOFOLLOW_LINKS;

 

import java.io.File;

import java.io.IOException;

import java.nio.file.FileSystems;

import java.nio.file.FileVisitResult;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.SimpleFileVisitor;

import java.nio.file.StandardWatchEventKinds;

import java.nio.file.WatchEvent;

import java.nio.file.WatchEvent.Kind;

import java.nio.file.WatchKey;

import java.nio.file.WatchService;

import java.nio.file.attribute.BasicFileAttributes;

import java.util.HashMap;

import java.util.Map;

 

/**

 * 文件夹监控

 * 

 * @author Goofy a href="";/a

 * @Date 2015年7月3日 上午9:21:33

 */

public class WatchDir {

 

    private final WatchService watcher;

    private final MapWatchKey, Path keys;

    private final boolean subDir;

 

    /**

     * 构造方法

     * 

     * @param file

     *            文件目录,不可以是文件

     * @param subDir

     * @throws Exception

     */

    public WatchDir(File file, boolean subDir, FileActionCallback callback) throws Exception {

        if (!file.isDirectory())

            throw new Exception(file.getAbsolutePath() + "is not a directory!");

 

        this.watcher = FileSystems.getDefault().newWatchService();

        this.keys = new HashMapWatchKey, Path();

        this.subDir = subDir;

 

        Path dir = Paths.get(file.getAbsolutePath());

 

        if (subDir) {

            registerAll(dir);

        } else {

            register(dir);

        }

        processEvents(callback);

    }

 

    @SuppressWarnings("unchecked")

    static T WatchEventT cast(WatchEvent? event) {

        return (WatchEventT) event;

    }

 

    /**

     * 观察指定的目录

     * 

     * @param dir

     * @throws IOException

     */

    private void register(Path dir) throws IOException {

        WatchKey key = dir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);

        keys.put(key, dir);

    }

 

    /**

     * 观察指定的目录,并且包括子目录

     */

    private void registerAll(final Path start) throws IOException {

        Files.walkFileTree(start, new SimpleFileVisitorPath() {

            @Override

            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {

                register(dir);

                return FileVisitResult.CONTINUE;

            }

        });

    }

 

    /**

     * 发生文件变化的回调函数

     */

    @SuppressWarnings("rawtypes")

    void processEvents(FileActionCallback callback) {

        for (;;) {

            WatchKey key;

            try {

                key = watcher.take();

            } catch (InterruptedException x) {

                return;

            }

            Path dir = keys.get(key);

            if (dir == null) {

                System.err.println("操作未识别");

                continue;

            }

 

            for (WatchEvent? event : key.pollEvents()) {

                Kind kind = event.kind();

 

                // 事件可能丢失或遗弃

                if (kind == StandardWatchEventKinds.OVERFLOW) {

                    continue;

                }

 

                // 目录内的变化可能是文件或者目录

                WatchEventPath ev = cast(event);

                Path name = ev.context();

                Path child = dir.resolve(name);

                File file = child.toFile();

                if (kind.name().equals(FileAction.DELETE.getValue())) {

                    callback.delete(file);

                } else if (kind.name().equals(FileAction.CREATE.getValue())) {

                    callback.create(file);

                } else if (kind.name().equals(FileAction.MODIFY.getValue())) {

                    callback.modify(file);

                } else {

                    continue;

                }

 

                // if directory is created, and watching recursively, then

                // register it and its sub-directories

                if (subDir  (kind == StandardWatchEventKinds.ENTRY_CREATE)) {

                    try {

                        if (Files.isDirectory(child, NOFOLLOW_LINKS)) {

                            registerAll(child);

                        }

                    } catch (IOException x) {

                        // ignore to keep sample readbale

                    }

                }

            }

 

            boolean valid = key.reset();

            if (!valid) {

                // 移除不可访问的目录

                // 因为有可能目录被移除,就会无法访问

                keys.remove(key);

                // 如果待监控的目录都不存在了,就中断执行

                if (keys.isEmpty()) {

                    break;

                }

            }

        }

    }

 

}

java.util.zip.ZipException这个问题怎么解决?

引入的jar包不对,或者你的压缩文件不标准。

一般就会报这个错误。

关于上面英语的翻译:

Key features(主要特性):

Create, Add, Extract, Update, Remove files from a Zip file(针对ZIP压缩文件创建、添加、抽出、更新和移除文件)

Read/Write password protected Zip files(读写有密码保护的Zip文件)

Supports AES 128/256 Encryption(支持AES 128/256算法加密)

Supports Standard Zip Encryption(支持标准Zip算法加密)

Supports Zip64 format(支持zip64格式)

Supports Store (No Compression) and Deflate compression method(支持Store(非压缩)和Deflate压缩方法---不太明白)

Create or extract files from Split Zip files (Ex: z01, z02,...zip)(针对分块zip文件创建和抽出文件)

Supports Unicode file names(支持Unicode编码文件名)

Progress Monitor(进度监控)

JavaWeb下载文件,怎么获取文件下载完毕的状态?

在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-fileupload依赖于commons-io这个包,所以需要下载这两个包commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar。

1、搭建环境

创建Web项目,将包导入到项目lib下

2、实现文件上传

(第一种上传的方法)

新建upload.jsp页面

?

12345678910111213141516

%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""htmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"titleupload file/title/headbody  !--这里的%=request.getContextPath()%是表示项目的绝对路径,也就是说不管你以后将项目拷贝到哪个位置,它都会找到准确的路径 --  form action="%=request.getContextPath()%/uploadServlet" enctype="multipart/form-data" method="post"    span选择文件:/spaninput type="file" name="file1"    input type="submit" value="上传"  /form/body/html

新建处理文件上传的Servlet

?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

package com.load; import java.io.File;import java.io.IOException;import java.util.List;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;@WebServlet("/uploadServlet")public class uploadServlet extends HttpServlet {  private static final long serialVersionUID = 1L;  public uploadServlet() {    super();  }  /* fileupload 包中, HTTP 请求中的复杂表单元素都被看做一个 FileItem 对象;   * FileItem 对象必须由 ServletFileUpload 类中的 parseRequest() 方法解析 HTTP 请求   * (即被包装之后的 HttpServletRequest 对象)出来,即分离出具体的文本表单和上传文件   * */  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //通过isMultipartContent()方法:分析请求里面是不是有文件上的请求,    boolean isMultipart = ServletFileUpload.isMultipartContent(request);    if(isMultipart){      //创建可设置的磁盘节点工厂      DiskFileItemFactory factory = new DiskFileItemFactory();      //获取请求的上下文信息      ServletContext servletContext = request.getServletContext();      //缓存目录,每个服务器特定的目录      File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");      //设置服务器的缓存目录      factory.setRepository(repository);      //ServletFileUpload 对象的创建需要依赖于 FileItemFactory      //工厂将获得的上传文件 FileItem 对象保存至服务器硬盘,即 DiskFileItem 对象。      ServletFileUpload upload = new ServletFileUpload(factory);      try {        //解析即被包装之后的 HttpServletRequest对象,既是分离文本表单和上传文件(http请求会被包装为HttpServletRequest)        ListFileItem items = upload.parseRequest(request);        for(FileItem item:items){          String fieldName = item.getFieldName();           String fileName = item.getName();          String contentType = item.getContentType();          boolean isInMemory = item.isInMemory();          long sizeInBytes = item.getSize();          //实例化一个文件          //request.getRealPath(获取真实路径)          File file = new File(request.getRealPath("/")+"/loads"+fileName.substring(fileName.lastIndexOf("\\")+1,fileName.length()));          item.write(file);        }      } catch (FileUploadException e) {        e.printStackTrace();      } catch (Exception e) {                 e.printStackTrace();      }    }  }   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  }}

(第二种上传的方法)

新建Jsp页面(同上,只是路径改变下)

?

12345678910111213141516

%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""htmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"titleupload file/title/headbody  !--这里的%=request.getContextPath()%是表示项目的绝对路径,也就是说不管你以后将项目拷贝到哪个位置,它都会找到准确的路径 --  form action="%=request.getContextPath()%/uploadservlet1" enctype="multipart/form-data" method="post"    span选择文件:/spaninput type="file" name="file1"    input type="submit" value="上传"  /form/body/html

建立Servlet处理上传

?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

package com.load; import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;@WebServlet("/uploadservlet1")@MultipartConfig(location="")public class uploadservlet1 extends HttpServlet {  private static final long serialVersionUID = 1L;  public uploadservlet1() {    super();  }   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    response.setContentType("text/html;charset=UTF-8");    request.setCharacterEncoding("utf-8");         //取得上传文件,读取文件    Part part = request.getPart("file1");    //定义一个变量去接收文件名    String filename = null;    //Content-Disposition: 就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名    //Content-Disposition:告诉浏览器以下载的方式打开文件    for (String content : part.getHeader("content-disposition").split(";")) {      System.out.println(content);      //取得文件名      if (content.trim().startsWith("filename")) {        //截取文件名        filename = content.substring(            content.indexOf('=') + 1).trim().replace("\"", "");      }    }    //输出流     OutputStream out = null;     //输入流     InputStream filecontent = null;     //File.separator 取得系统的分割线等数据     out = new FileOutputStream(new File("e:/loads" + File.separator + filename));     int read;    //获得一个输入流    filecontent = part.getInputStream();    final byte[] bytes = new byte[1024];         while ((read = filecontent.read(bytes)) != -1) {      out.write(bytes, 0, read);    }    System.out.println("New file " + filename + " created at " + "/loads");  }   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub    doGet(request, response);  }}

(第三种上传的方法)

这里使用的是jspSmartUpload包上传下载,笔者认为这种上传下载较为简单,但是好像不是很多人用,不懂。

创建HTML页面

?

123456789101112131415161718192021222324252627

!DOCTYPE htmlhtmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"title上传文件/title/headbody  p /p  p align="center"上传文件选择/p  form method="post" Action="../DouploadServlet" enctype="multipart/form-data"    table width="75%" border="1" align="center"      trtddiv align="center"        1.input type="file" name="file1"       /div/td/tr        trtddiv align="center"        2.input type="file" name="file2"       /div/td/tr        trtddiv align="center"        3.input type="file" name="file3"       /div/td/tr        trtddiv align="center"        input type="submit" name="Submit" value="上传他"      /div/td/tr    /table  /form/body/html

创建Servlet处理上传文件

?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

package com.load; import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext; import com.jspsmart.upload.File;import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException;@WebServlet("/DouploadServlet")public class DouploadServlet extends HttpServlet {  private static final long serialVersionUID = 1L;       public DouploadServlet() {    super();  }   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    response.setContentType("text/html;charset=UTF-8");    PrintWriter out = response.getWriter();    //新建一个智能上传对象    SmartUpload su = new SmartUpload();    /*     * PageContext pageContext;      HttpSession session;      ServletContext application;      ServletConfig config;      JspWriter out;      Object page = this;      HttpServletRequest request,      HttpServletResponse response      其中page对象,request和response已经完成了实例化,而其它5个没有实例化的对象通过下面的方式实例化      pageContext = jspxFactory.getPageContext(this, request, response,null, true, 8192, true);     */    //通过Jsp工厂类获取上下文环境    PageContext pagecontext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);    //上传初始化    su.initialize(pagecontext);     //上传文件    try {      su.upload();      //将上传文件保存到指定目录      int count = su.save("/share");      out.println(count+"个文件上传成功!br"+su.toString());    } catch (SmartUploadException e) {      e.printStackTrace();    }         //逐个提取上传文件信息    for(int i=0;isu.getFiles().getCount();i++){      File file = su.getFiles().getFile(i);      //如果文件不存在      if(file.isMissing()) continue;             //显示当前文件信息      out.println("table border=1");      out.println("trtd表单项名(FieldName)/td/td"+file.getFieldName()+"/td/tr");      out.println("trtd文件长度/tdtd"+file.getSize()+"/td/tr");      out.println("trtd文件名/tdtd"+file.getFileName()+"/td/tr");      out.println("trtd文件扩展名/tdtd"+file.getFileExt()+"/td/tr");      out.println("trtd文件全名/tdtd"+file.getFilePathName()+"/td/tr");      out.println("/tablebr");    }  }   /**   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)   */  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub    doGet(request, response);  } }

注意:代码 int count = su.save("/share");表示你需要先建个文件夹,所以你可以先在Webcontent建立一个,然后将项目取消部署,再重新部署进去之后就会在运行那边建立起一个文件夹了!

或者你可以直接找到运行的路径,然后建立share文件夹。

3、实现文件下载

(第一种文件下载)

注意:该代码是直接访问Servlet类的

?

123456789101112131415161718192021222324252627282930313233343536373839404142

package com.load; import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;  //直接使用进行下载,但是这个有缺陷,如果下载文件名中有中文,就会变成乱码现象!@WebServlet("/download")public class download extends HttpServlet {  private static final long serialVersionUID = 1L;   public download() {    super();  }  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     response.setContentType("text/plain;charset=utf-8");     response.setCharacterEncoding("utf-8");     response.setHeader("Location","中文.txt");     response.setHeader("Content-Disposition", "attachment; filename=" + "账号.txt");     OutputStream outputStream = response.getOutputStream();     InputStream inputStream = new FileInputStream("E:/loads"+"/账号.txt");     byte[] buffer = new byte[1024];     int i = -1;     while ((i = inputStream.read(buffer)) != -1) {     outputStream.write(buffer, 0, i);     }     outputStream.flush();     outputStream.close();  }  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  } }

(第二种下载方法)

新建jsp页面选择下载

%@ page language="java" contentType="text/html; charset=UTF-8"

  pageEncoding="UTF-8"%!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""htmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"title下载/title/headbody  a href="../DoDownloadServlet?filename=呵呵.txt"点击下载/a/body/html

创建Servlet类进行下载(注意:该下载如果文件名是中文的话,一样会出现乱码现象)

package com.load;

 import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext; import org.hsqldb.lib.StringUtil; import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException; @WebServlet("/DoDownloadServlet")public class DoDownloadServlet extends HttpServlet {  private static final long serialVersionUID = 1L;   public DoDownloadServlet() {    super();  }   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //得到下载文件的名称    //String filename = request.getParameter("filename");    //String filename = new String(FileName.getBytes("iso8859-1"),"UTF-8");    //新建SmartUpload对象    SmartUpload su = new SmartUpload();    PageContext pagecontext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);    //上传初始化    su.initialize(pagecontext);    //设置禁止打开该文件    su.setContentDisposition(null);    //下载文件    try {      su.downloadFile("/listener/"+filename);    } catch (SmartUploadException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  }}

(第三种下载的方法)

同上的jsp页面代码,这里就不再重复了。

新建Serlvet类,实现下载功能(注意:这里文件名就算是中文名,也不会出现乱码问题了!)

package com.load;

 import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext; import org.hsqldb.lib.StringUtil; import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException; @WebServlet("/DoDownloadServlet")public class DoDownloadServlet extends HttpServlet {  private static final long serialVersionUID = 1L;   public DoDownloadServlet() {    super();  }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //获得文件名称    String path1 = request.getParameter("filename");    //获得路径名称    String path = request.getSession().getServletContext().getRealPath("/listener/"+path1);     // path是根据日志路径和文件名拼接出来的     File file = new File(path);     String filename = file.getName();    try {       //判断是否是IE11       Boolean flag= request.getHeader("User-Agent").indexOf("like Gecko")0;      //IE11 User-Agent字符串:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko      //IE6~IE10版本的User-Agent字符串:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.0; Trident/6.0)        if (request.getHeader("User-Agent").toLowerCase().indexOf("msie") 0||flag){          filename = URLEncoder.encode(filename, "UTF-8");//IE浏览器        }else {        //先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,        //这个文件名称用于浏览器的下载框中自动显示的文件名        filename = new String(filename.replaceAll(" ", "").getBytes("UTF-8"), "ISO8859-1");        //firefox浏览器        //firefox浏览器User-Agent字符串:        //Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0        } InputStream fis = new BufferedInputStream(new FileInputStream(path));        byte[] buffer;        buffer = new byte[fis.available()];         fis.read(buffer);         fis.close();         response.reset();         response.addHeader("Content-Disposition", "attachment;filename=" +filename);         response.addHeader("Content-Length", "" + file.length());         OutputStream os = response.getOutputStream();         response.setContentType("application/octet-stream");         os.write(buffer);// 输出文件         os.flush();         os.close();       } catch (IOException e) {        e.printStackTrace();       }        System.out.println(filename);  }   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  }}

java文件下载进度监控的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java实现下载进度条、java文件下载进度监控的信息别忘了在本站进行查找喔。