更新時間:2020-11-19 15:49:25 來源:動力節點 瀏覽22159次
本文實例為大家分享了Java實現文件下載的具體代碼,供大家參考,具體內容如下:
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實現文件下載的兩種方法”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習