-
2020-12-31 16:00:38
最近接到一个需求,就是将远程目录下的文件或文件夹下载到指定目录下,下面来看下最后的成果。
1.首先,IO流输出文件(可以在浏览器端下载)
public HttpServletResponse download(String fileName, HttpServletResponse response) { File file = new File(gitConfig.getDestPath() + "/" + fileName); if (file.isDirectory()){ return downDestroy(file, response); }else{ return downFile(file,response); } } /** * 下载文件 * @param file * @param response * @return */ private HttpServletResponse downFile(File file, HttpServletResponse response) { InputStream fis = null; OutputStream toClient = null; try { // 以流的形式下载文件。 fis = new BufferedInputStream(new FileInputStream(file.getPath())); byte[] buffer = new byte[fis.available()]; fis.read(buffer); // 清空response response.reset(); toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); //如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8")); toClient.write(buffer); toClient.flush(); } catch (IOException ex) { ex.printStackTrace(); }finally{ try { File f = new File(file.getPath()); f.delete(); if(fis!=null){ fis.close(); } if(toClient!=null){ toClient.close(); } } catch (Exception e) { e.printStackTrace(); } } return response; } /** * 下载文件夹 * @param file * @param response * @return */ private HttpServletResponse downDestroy(File file, HttpServletResponse response) { String zipFilePath = gitConfig.getDestPath()+"/"+file.getName()+"_"+System.currentTimeMillis()/1000+".zip"; ZipCompressor zipCompressor = new ZipCompressor(zipFilePath); try { zipCompressor.compress(file.getPath()); File zipFile = new File(zipFilePath); downFile(zipFile,response); } catch (IOException e) { e.printStackTrace(); } return response; }
对应的工具类
import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.zip.CRC32; import java.util.zip.CheckedOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 压缩类 * */ public class ZipCompressor { static final int BUFFER = 8192; /** * 压缩的文件夹 */ private File zipFile; public ZipCompressor(String pathName) { zipFile = new File(pathName); } /** * 遍历需要压缩文件集合 * @param pathName * @throws IOException */ public void compress(String... pathName) throws IOException { ZipOutputStream out =null; FileOutputStream fileOutputStream=null; CheckedOutputStream cos=null; try { fileOutputStream = new FileOutputStream(zipFile); cos = new CheckedOutputStream(fileOutputStream,new CRC32()); out = new ZipOutputStream(cos); String basedir = ""; for (int i=0;i<pathName.length;i++){ compress(new File(pathName[i]), out, basedir); } } catch (Exception e) { throw new RuntimeException(e); }finally { if(out!=null){ out.close(); } if(fileOutputStream!=null){ fileOutputStream.close(); } if(cos!=null){ cos.close(); } } } /** * 压缩 * @param file * @param out * @param basedir */ private void compress(File file, ZipOutputStream out, String basedir) throws IOException { // 判断是目录还是文件 if (file.isDirectory()) { this.compressDirectory(file, out, basedir); } else { this.compressFile(file, out, basedir); } } /** * 压缩一个目录 * */ private void compressDirectory(File dir, ZipOutputStream out, String basedir) throws IOException { if (!dir.exists()){ return; } File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { // 递归 compress(files[i], out, basedir + dir.getName() + "/"); } } /** * 压缩一个文件 * * */ private void compressFile(File file, ZipOutputStream out, String basedir) throws IOException { if (!file.exists()) { return; } BufferedInputStream bis =null; try { bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(basedir + file.getName()); out.putNextEntry(entry); int count; byte[] data = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } } catch (Exception e) { throw new RuntimeException(e); }finally { if(bis!=null){ bis.close(); } } } }
2.接收IO文件流,并保存到本地(文件夹类接收的是压缩文件,接收完之后会将压缩文件解压然后删除压缩文件)
public void downFileOrDestroy(String fileName){ boolean isfile = true; if (fileName.indexOf(".")==-1){ //如果是文件夹 isfile =false; } String pluginsDir = "D:/file"; URL urlfile = null; HttpURLConnection httpUrl = null; BufferedInputStream bis = null; BufferedOutputStream bos = null; File path = new File(pluginsDir); if (!path.exists()){ path.mkdirs(); } File f = null; if (isfile){ f = new File(pluginsDir+"/"+fileName); }else{ f = new File(pluginsDir+File.separator+fileName+"_"+System.currentTimeMillis()/1000+".zip"); } try { urlfile = new URL("文件IO输出接口地址?fileName="+fileName); httpUrl = (HttpURLConnection) urlfile.openConnection(); httpUrl.connect(); InputStream inputStream = httpUrl.getInputStream(); bis = new BufferedInputStream(inputStream); FileOutputStream fileOutputStream = new FileOutputStream(f); bos = new BufferedOutputStream(fileOutputStream); int len = 2048; byte[] b = new byte[len]; while ((len = bis.read(b)) != -1) { bos.write(b, 0, len); } bos.flush(); bos.close(); bis.close(); httpUrl.disconnect(); if (!isfile){ //如果是文件夹,下载下来的是压缩文件,要解压文件 ZipUtil.unZipUncompress(f.getPath(),pluginsDir); } } catch (Exception e) { e.printStackTrace(); } finally { try { bis.close(); bos.close(); } catch (IOException e) { e.printStackTrace(); } } }
涉及到的工具类:
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; /** * @Author cs * @Date 2020/12/31 11:51 * @Version 1.0 */ public class ZipUtil { /** * zip文件解压 * @param inputFile 待解压文件夹/文件 * @param destDirPath 解压路径 */ public static void unZipUncompress(String inputFile,String destDirPath){ File srcFile = new File(inputFile);//获取当前压缩文件 InputStream is = null; FileOutputStream fos = null; try{ // 判断源文件是否存在 if (!srcFile.exists()) { throw new Exception(srcFile.getPath() + "所指文件不存在"); } ZipFile zipFile = new ZipFile(srcFile);//创建压缩文件对象 //开始解压 Enumeration<?> entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry) entries.nextElement(); // 如果是文件夹,就创建个文件夹 if (entry.isDirectory()) { srcFile.mkdirs(); } else { // 如果是文件,就先创建一个文件,然后用io流把内容copy过去 File targetFile = new File(destDirPath + "/" + entry.getName()); // 保证这个文件的父文件夹必须要存在 if (!targetFile.getParentFile().exists()) { targetFile.getParentFile().mkdirs(); } targetFile.createNewFile(); // 将压缩文件内容写入到这个文件中 is = zipFile.getInputStream(entry); fos = new FileOutputStream(targetFile); int len; byte[] buf = new byte[1024]; while ((len = is.read(buf)) != -1) { fos.write(buf, 0, len); } // 关流顺序,先打开的后关闭 fos.close(); is.close(); } } zipFile.close(); }catch (Exception e){ e.printStackTrace(); }finally { //删除压缩文件 boolean delete = srcFile.delete(); System.out.println(delete); } } }
有的朋友可能会遇到临时文件删除不掉的问题,一般出现这种情况的原因都是IO没关闭,检查下自己的代码,先打开的IO后关闭,按顺序关闭IO即可解决。
更多相关内容 -
Java12和Jdk12安装以及OpenJdk12源码
2019-03-23 14:12:39文档: JDK 12文档:...OracleJDK12下载:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html csdn上我下好的,速度较快:https://download.csdn...文档:
JDK 12文档:https://docs.oracle.com/en/java/javase/12/
下载:
OracleJDK12下载:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html
csdn上我下好的,速度较快:https://download.csdn.net/download/21aspnet/11052067
OpenJDK12:https://jdk.java.net/java-se-ri/12
源码:https://download.java.net/openjdk/jdk12/ri/openjdk-12+32_src.zip
说明:在Windows上作为开发和研究下载OracleJDK12就可以了,这个和OpenJDK差距不大。
OracleJDK12个人学习研究是免费的,而如果你安装在公司服务器用于商业服务是需要付费,
但是你也可以使用OpenJDK12用于线上,没有问题!
如果需要openjdk8
https://download.java.net/openjdk/jdk8/
http://www.java.net/download/openjdk/jdk8/promoted/b132/openjdk-8-src-b132-03_mar_2014.zip
安装:
新版的jdk安装很快,不像老版的1.8需要分为jdk和jre已经合并一个目录了。
很快就安装好了,很快很简单。
配置环境变量:
之前的
JAVA_HOME和CLASSPATH已经都不要了。只要配置jdk的bin到Path里:C:\Program Files\Java\jdk-12\bin
win10的:
下面是win7的:
验证版本:
Win10下 :
win7下:
修改IDEA配置:
jdk版本,语言特性和maven都要改为对应的jdk也就12.
运行测试:
一切很简单!
-
JDK 12下载
2019-09-02 10:15:13百度,JDK官网-->... 目录 ... 2.然后: ...3.下载好之后,剪切放置在自己熟悉的目录下,然后解压,下一步,设置安装路径, 4.配置环境变量。 5.附录 自学JDK 1.点击 2.然后: 我有个...百度,JDK官网-->https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
目录
3.下载好之后,剪切放置在自己熟悉的目录下,然后解压,下一步,设置安装路径,
1.点击
2.然后:
我有个小小的疑惑,
JDK 的 exe 和 zip 版本 有什么区别?
一个是安装版,一个是解压版。
3.下载好之后,剪切放置在自己熟悉的目录下,然后解压,下一步,设置安装路径,
如:
4.配置环境变量。
计算机,右键,属性,高级系统设置,环境变量,
java_home D:\lk\software\eclipse-software\Java\jdk-12.0.2
path ;D:\lk\software\eclipse-software\Java\jdk-12.0.2\bin
验证 cmd java -version
5.附录 自学JDK
因为是第一次自己安装JDK,所以内心有点小激动,发现原来官网可以自学JDK。
跳转至: https://docs.oracle.com/en/java/javase/12/
验证成功,
疑问:
JRE有什么作用?
JDK包含JRE
jre是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。
jdk就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
如果是要运行java程序例如桌宠之类的,安装jre
如果是要做java开发安装jdk -
JAVA下载安装及eclipse下载安装
2021-02-27 09:53:29一.安装JDK(java developemnt kit--java开发工具包 )jdk的官方网站为:www.oracle.com进入网站:1.在滑动页面上直接点击Download JDK 12。2.或者点击Downloads,进入下载页面。...选择Java选择Java(JDK) for D...一.安装JDK(java developemnt kit--java开发工具包 )
jdk的官方网站为:www.oracle.com
进入网站:
1.在滑动页面上直接点击Download JDK 12。
2.或者点击Downloads,进入下载页面。
点击Downloads,进入下载页面:
选择Developer Download(开发者下载)------>选择Java
选择Java(JDK) for Developers.
Java SE Downloads(java标准版下载)SE为标准版本。选择Oracle JDK DOWNLOAD.
选择Accept License Agreement,接受条款。
选择自己的系统对应的下载。我的是windows,选择的是jdk-12,64位的。
找到下载好的exe文件,点击运行。
点下一步,建议在D盘,或者其他盘建立单独的文件夹来存放jdk,比如D:\java。建议把jdk的版本号留着,方便以后查看。
点下一步,进行安装。安装完成点击关闭。
配置JAVA_HOME环境变量,以及Path环境变量。
环境变量四在操作系统中配置的一些参数。这些参数可以在程序运行时被调用。例如:最典型的path环境变量。如果在系统中运行一个程序,而不告诉系统具体的路径地址,那么系统就会依据Path参数值去寻找这个程序来运行。
右键“我的电脑”-->属性或者“这电脑”--->属性----->高级系统设置,点击“环境变量”。
系统环境变量设置(win系统变量优先级大于用户变量),我们尽量修改下面这个系统变量。
在系统变量这先查看一下窗口是否有JAVA_HOME的变量,没有再新建一个JAVA_HOME的变量。
变量名输入JAVA_HOME建议用全大写,变量值输入刚才安装的jdk的路径。点击确定。
编辑Path环境变量,增加%JAVA_HOME%\bin.
点击编辑,进入path页面。
在win7变量值前加入%JAVA_HOME%\bin,在win10点击“新建”,加入%JAVA_HOME%\bin,再上移到最顶部。
点击确定。
设置好环境变量后,在打开新的cmd窗口进行测试。
输入java -version ,显示出版本号。输出javac,显示用法。表示jdk已正确安装。
二.下载eclipse及安装
IDE(Integrated Development Enviroment)集成开发环境,eclipse。
进入官网:www.eclipse.org
点击Download。
下载安装包,安装包是一个免安装的版本。
选择Java开发者的版本,根据自己的操作系统,来选择下载。
点击下载。只要把安装包解压到d:\java\eclipse的目录下即可。
解压完成后,启动eclipse。
双击eclipse.exe,首先配置工作空间(workspace)。工作空间存放java的project。
配置完成后,进入eclipse。
如果需要,在桌面上建立一个eclipse的快捷方式。
这样,java及eclipse就安装完成了。
-
java JRE下载、安装以及环境变量教程
2021-03-13 20:27:17java JRE下载、安装以及环境变量教程作者:小丸子 来源:PC下载网时间:2017-10-17 19:12:33JRE也就是(Java Runtime Environment)Java运行环境,是运行JAVA程序所必须的环境的集合,包含各种类库。今天PC下载网小编为您... -
java实现下载网络图片到本地
2021-12-28 15:22:44文章目录 前言 一、pandas是什么? 二、使用步骤 1.... 2....当我们在网络上看到自己想要保存的照片,有的网站设置了权限,不能保存情况下,我们可以借助Java的... * 使用java中的文件流下载网上的图片,保存到本地... -
java 版本替换,java12 安装
2019-03-20 09:24:211.jdk官网,下载最新版本的jdk 2.下载之后点击图标进行安装 3.选择开发工具,更改java安装目录,点击下一步,直至安装完成 4.创建环境变量 点击我的电脑,右键—属性—高级系统设置—高级—环境变量 (1)新建->... -
Java多文件压缩下载解决方案
2018-09-07 18:00:33Java多文件压缩下载解决方案 需求: 会员运营平台经过改版后页面增加了许多全部下载链接,上周上线比较仓促,全部下载是一个直接下载ZIP压缩文件的链接,每个ZIP压缩文件都是由公司运营人员将页面需要下载的文件... -
java开源包12
2013-06-28 10:14:45它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。... -
Java虚拟机安卓版下载
2021-02-12 10:19:00java模拟器安卓版是一款很不错的安卓手机软件!Java虚拟机安卓版适用于Android平台的手机软件。Java虚拟机安卓版安装后可运行qq、UCWEB、大智慧手机炒股等软件的Java版本。Jbed是windows mobile pocket pc上非常流行... -
java jdk官方下载|java jdk v1.8.0 官方免费版-520下载站
2021-02-12 10:09:32java jdk是Sun Microsystems针对Java开发员的编程软件,java jdk支持Lambda表达式增添了标准库,整合之前几个版本的特点,优化各种问题,志在为用户提供一个稳定方便的jave测试环境,提高程序匹配性,减小开发人员... -
java+服务器上传和下载文件
2019-08-22 16:13:571、介绍enctype enctype 属性规定发送到服务器之前应该如何对...http://blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87%E4%BB%B6%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0%E4%B8%8A%E4%BC%A0/ -
Java15下载 JDK15(Java SE Development Kit 15) 15.0.2 官方正式版 Win64位 下载-脚本之家
2021-02-27 08:13:35Java Development Kit 15简称JDK15,是Java必备的一款开发工具包,包含Java运行环境、Java开发...本次为大家带来了最新的Java SE 15最新版下载程序,欢迎需要的朋友前来下载使用。根据发布规划,这是一个短期版本... -
Java最新JDK和API下载(持续同步更新于官网)
2021-02-26 12:09:30Java最新JDK和API下载(持续同步更新于官网) 提供涵盖所有主流操作系统(包括Windows、Linux、MacOS等)的Java最新稳定版JDK和对应API的下载 以下所有Java JDK的安装包、压缩包(免安装版)以及对应的API,均直接... -
100个Java经典编程实例源代码JAVA源码下载
2021-02-28 08:24:36100个Java经典编程实例源代码(2 folders, 2 files, 1.38 KB, 25.13 MB in total.)java运用编程100例(二)例57-100(45 folders, 2 files, 1.38 KB, 17.04 MB in total.)实例100(1 ... -
Java学习路线总结,搬砖工逆袭Java架构师
2021-09-04 13:15:51前情提要 无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,...我觉得一个Java程序员的学习路线应该是: javase; javaweb; 数据库; ssm; springboot; 数据结构与算法; JVM; -
javaftp下载出现阻塞问题
2018-03-12 14:32:14用ftp下载时,执行到ftpClient.retrieveFile(fileName, os); 这个方法就卡死了,在网上找了很多方法也不行, ftpClient.enterLocalPassiveMode(); 加上主动被动都不行,跪求大神帮忙解决 ![图片说明]... -
java 下载txt文件(页面代码+Java后台代码+下载工具类)
2020-07-25 20:03:55下载一定要通过form表单的方式,js的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。但form可以返回“流”类型的数据。 <... -
JavaCV入门教程目录(JavaCV从入门到实战,JavaCV指南手册,免费JavaCV教程)
2022-01-05 10:44:05JavaCV入门教程(JavaCV从入门到实战,JavaCV指南手册,免费JavaCV教程) 全套JavaCV人脸检测、训练、识别免费教程 全套JavaCV音视频开发免费教程 前言 在这个2022年即将到来之际,博主决定将JavaCV大部分入门和基础... -
JAVA互联网架构师完整不加密版
2017-09-05 21:37:01JAVA互联网架构师完整不加密版,需要就拿去,32.12GB,517个视频。包含netty,zookeeper,dubbo,redis,JVM等等等,保证不亏。 -
java下载resource目录的文件
2018-10-15 14:30:19/** * 根据工具名称下载工具 * * @param toolName * 工具名 * @param response * @return com.vteam.sme.api.entity.RespEntity * @author marke.huang * @date 2018/10/15 00... -
Java代码混淆工具 Proguard4.10(官方免费下载)
2013-12-15 14:41:30proguard4.10 官方版软件,免费下载 1、官网地址:http://proguard.sourceforge.net/ 截止2013-12-15 官网正式版本为4.10, 提供4.11Beat版 2、 解压 proguard4.10.zip ,运行官方例子如下: cd examples java -... -
2020年最新 java JDK 11 下载、安装与环境变量配置教程
2020-08-15 19:33:34java JDK11下载、安装与环境变量配置 一、下载步骤 首先明确自己的操作系统(本次配置jdk操作系统:Windows 10 家庭中文版) 下载地址:https://www.oracle.com/java/technologies/javase-downloads.html#JDK14 ... -
Java-Jdk12版本下载后没有Jre的解决方案以及配置环境变量
2019-07-10 14:07:431.下载jdk12 网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html,根据自己系统来下载 2.运行jdk-12.0.1_windows-x64_bin ,将路径改为自己安装想... -
Java基础知识总结(2021版)
2021-01-09 16:20:53大家好,我是素小暖,2012年毕业,2016年通过培训转行java开发,今天2021年1月9日,转行之路跌跌绊绊,蓦然回首,已经满满的4年工作经验了?但感觉知识还是相当的匮乏,没自信,也许是努力程度还不够吧。很感谢CSDN... -
Oracle EBS R12 IE兼容Java插件(多版本)相关设置
2018-12-16 22:22:391.设置“JRE自动下载”->选择“从不自动下载” 2.设置“安全”->“常规”->取消“站点证书与主机名不匹配时发出警告”的勾选。 3.设置“安全”->“混全代码”->选择“禁止验证(不推荐)” 三、 Java 多版... -
Eclipse IDE for Enterprise Java Developers下载安装
2020-09-19 14:29:26eclipse下载地址https://www.eclipse.org/downloads/packages/release/2018-12/r 安装: 安装完成之后,点击LAUNCH, 然后设置workspace目录,点击launch即可打开eclips 同时安装时在桌面生成有快捷方式 -
一篇文章教你用 java爬虫 下载全站视频
2019-02-28 20:15:17环境:jdk1.8、win10、科学上网 ...3,在视频页面,分析url,找出视频的实际下载地址,找到规律 4,开始下载 上代码! public static void main(String[] args) throws Exception { final String SCO... -
Java知识体系最强总结(2021版)
2019-12-18 10:09:56更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过...