本文實例為大家分享了Java實現(xiàn)文件下載的具體代碼,供大家參考,具體內(nèi)容如下:
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();??????//?設(shè)置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");//?文件的存放路徑????//?設(shè)置輸出的格式????response.reset();????response.setContentType("bin");????response.addHeader("Content-Disposition",?"attachment;?filename=""?+?fileName?+?""");????//?循環(huán)取出流中的數(shù)據(jù)????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?{????//?下載網(wǎng)絡(luò)文件????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());??????//?文件名應(yīng)該編碼成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();??}
以上就是北大青鳥長沙麓谷校區(qū)java培訓(xùn)機構(gòu)的小編針對“Java實現(xiàn)文件下載的兩種方法”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。