JAVA实现下载文件功能的两种方法

时间:2022-10-06 10:30:20       来源:互联网


(资料图)

第一种方法:

public HttpServletResponse download(String path, HttpServletResponse response) {  try {   // path是指欲下载的文件的路径。   File file = new File(path);   // 取得文件名。   String filename = file.getName();   // 取得文件的后缀名。   String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();   // 以流的形式下载文件。   InputStream fis = new BufferedInputStream(new FileInputStream(path));   byte[] buffer = new byte[fis.available()];   fis.read(buffer);   fis.close();   // 清空response   response.reset();   // 设置response的Header   response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));   response.addHeader("Content-Length", "" + file.length());   OutputStream toClient = new BufferedOutputStream(response.getOutputStream());   response.setContentType("application/octet-stream");   toClient.write(buffer);   toClient.flush();   toClient.close();  } catch (IOException ex) {   ex.printStackTrace();  }  return response; } public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {  // 下载本地文件  String fileName = "Operator.doc".toString(); // 文件的默认保存名  // 读到流中  InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径  // 设置输出的格式  response.reset();  response.setContentType("bin");  response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");  // 循环取出流中的数据  byte[] b = new byte[100];  int len;  try {   while ((len = inStream.read(b)) > 0)    response.getOutputStream().write(b, 0, len);   inStream.close();  } catch (IOException e) {   e.printStackTrace();  } } public void downloadNet(HttpServletResponse response) throws MalformedURLException {  // 下载网络文件  int bytesum = 0;  int byteread = 0;  URL url = new URL("windine.blogdriver.com/logo.gif");  try {   URLConnection conn = url.openConnection();   InputStream inStream = conn.getInputStream();   FileOutputStream fs = new FileOutputStream("c:/abc.gif");   byte[] buffer = new byte[1204];   int length;   while ((byteread = inStream.read(buffer)) != -1) {    bytesum += byteread;    System.out.println(bytesum);    fs.write(buffer, 0, byteread);   }  } catch (FileNotFoundException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  } }

第二种方法:

public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {  File f = new File(filePath);  if (!f.exists()) {   response.sendError(404, "File not found!");   return;  }  BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));  byte[] buf = new byte[1024];  int len = 0;  response.reset(); // 非常重要  if (isOnLine) { // 在线打开方式   URL u = new URL("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());  }  OutputStream out = response.getOutputStream();  while ((len = br.read(buf)) > 0)   out.write(buf, 0, len);  br.close();  out.close(); }

以上就是JAVA实现下载文件功能的两种方法的详细内容,更多关于JAVA实现下载文件的资料请关注其它相关文章!

关键词: JAVA 下载文件 Java