本文主要是讲述Java文件下载的几种方式,更多Java技术知识,请登陆疯狂软件教育官网。

  publicHttpServletResponsedownload(Stringpath,HttpServletResponseresponse){

  try{

  //path是指欲下载的文件的路径。

  Filefile=newFile(path);

  //取得文件名。

  Stringfilename=file.getName();

  //取得文件的后缀名。

  Stringext=filename.substring(filename.lastIndexOf(".")+1).toUpperCase();

  //以流的形式下载文件。

  InputStreamfis=newBufferedInputStream(newFileInputStream(path));

  byte[]buffer=newbyte[fis.available()];

  fis.read(buffer);

  fis.close();

  //清空response

  response.reset();

  //设置response的Header

  response.addHeader("Content-Disposition","attachment;filename="+newString

  (filename.getBytes()));

  response.addHeader("Content-Length",""+file.length());

  OutputStreamtoClient=newBufferedOutputStream(response.getOutputStream());

  response.setContentType("application/octet-stream");

  toClient.write(buffer);

  toClient.flush();

  toClient.close();

  }catch(IOExceptionex){

  ex.printStackTrace();

  }

  returnresponse;

  }

  publicvoiddownloadLocal(HttpServletResponseresponse)throwsFileNotFoundException{

  //下载本地文件

  StringfileName="Operator.doc".toString();//文件的默认保存名

  //读到流中

  InputStreaminStream=newFileInputStream("c:/Operator.doc");//文件的存放路径

  //设置输出的格式

  response.reset();

  response.setContentType("bin");

  response.addHeader("Content-Disposition","attachment;filename=\""+fileName+"\"");

  //循环取出流中的数据

  byte[]b=newbyte[100];

  intlen;

  try{

  while((len=inStream.read(b))>0)

  response.getOutputStream().write(b,0,len);

  inStream.close();

  }catch(IOExceptione){

  e.printStackTrace();

  }

  }

  publicvoiddownloadNet(HttpServletResponseresponse)throwsMalformedURLException{

  //下载网络文件

  intbytesum=0;

  intbyteread=0;

  URLurl=newURL("windine.blogdriver.com/logo.gif");

  try{

  URLConnectionconn=url.openConnection();

  InputStreaminStream=conn.getInputStream();

  FileOutputStreamfs=newFileOutputStream("c:/abc.gif");

  byte[]buffer=newbyte[1204];

  intlength;

  while((byteread=inStream.read(buffer))!=-1){

  bytesum+=byteread;

  System.out.println(bytesum);

  fs.write(buffer,0,byteread);

  }

  }catch(FileNotFoundExceptione){

  e.printStackTrace();

  }catch(IOExceptione){

  e.printStackTrace();

  }

  }

  //支持在线打开文件的一种方式

  publicvoiddownLoad(StringfilePath,HttpServletResponseresponse,booleanisOnLine)

  throwsException{

  Filef=newFile(filePath);

  if(!f.exists()){

  response.sendError(404,"Filenotfound!");

  return;

  }

  BufferedInputStreambr=newBufferedInputStream(newFileInputStream(f));

  byte[]buf=newbyte[1024];

  intlen=0;

  response.reset();//非常重要

  if(isOnLine){//在线打开方式

  URLu=newURL("file:///"+filePath);

  response.setContentType(u.openConnection().getContentType());

  response.setHeader("Content-Disposition","inline;filename="+f.getName());

  //文件名应该编码成UTF-8

  }else{//纯下载方式

  response.setContentType("application/x-msdownload");

  response.setHeader("Content-Disposition","attachment;filename="+f.getName());

  }

  OutputStreamout=response.getOutputStream();

  while((len=br.read(buf))>0)

  out.write(buf,0,len);

  br.close();

  out.close();

  }

  广州Java培训紧跟最新的Java潮流技术,国内首家讲解Java 8新特征,根据企业工作中需要的开发技术,让学员学习的课程是企业最需要的实用技术,而且也保障学员能把这些技能点学会、学好,并且疯狂软件教育的课程实时更新,在信息技术快速发展的情况下,可以保证学员学到更新更主流的技术。