java对服务器文件操作、获取,删除,下载
java原生环境,不许引用其他文件
这次废话不多说,直接上代码
各个代码块之间的代码可以单独使用
文章目录
- 远端获取文件
- URL进行远端文件下载
- 本地文件打包
- 打zip包
- 文件下载到浏览器
- http连接进行点击下载到浏览器
- 本地文件操作
- 删除目录
远端获取文件
URL进行远端文件下载
本人亲写,绝对有效
/*** @author LM* @date 2021-11-03 - 9:40*/
public class FileGainUtil {public static void main(String[] args) {FileGainUtil fileUtilLM = new FileGainUtil();String[] urls = new String[]{"https://img-blog.csdnimg.cn/img_convert/c8b0205e2b93a2c243b9c95541e83bbc.png","https://img-blog.csdnimg.cn/img_convert/d645dc79a2565bcb940d237807666172.png","https://img-blog.csdnimg.cn/img_convert/2b17c8c96f0d2ce292cae9b7ba68fb98.png","http://wwwweeaazzcdfdsa" //这个地址是错误的,用于测试};List<String> list = new ArrayList<>();//需要下载的文件地址集合,下载到本地的目录,文件后缀,存储下载过程中的错误信息//如果本地机器是linux系统 第二个参数可以直接是 /xx/xx/xxx 没有这个路径的话会先建fileUtilLM.actionAddFile(urls,"F:/cc/imama",".jpg",list);System.out.println(list);//z这个进行单个文件的下载String url = "https://img-blog.csdnimg.cn/img_convert/c8b0205e2b93a2c243b9c95541e83bbc.png";String path = "F://cs/image";String suffix = ".jpg";String name = "照片1";fileUtilLM.downLoadFile(url,path,suffix,name);}/*** 得到图片的二进制数据,以二进制封装得到数据,具有通用性* @param inStream* @return* @throws Exception*/private byte[] readInputStream(InputStream inStream) throws Exception{ByteArrayOutputStream outStream = new ByteArrayOutputStream();//创建一个Buffer字符串byte[] buffer = new byte[1024];//每次读取的字符串长度,如果为-1,代表全部读取完毕int len = 0;//使用一个输入流从buffer里把数据读取出来while( (len=inStream.read(buffer)) != -1 ){//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度outStream.write(buffer, 0, len);}//关闭输入流inStream.close();//把outStream里的数据写入内存return outStream.toByteArray();}/**** @param urls 文件url路径数组* @param pathName 文件临时保存的路径* @param suffix 文件保存的后缀* @throws Exception*/public boolean actionAddFile (String[] urls, String pathName, String suffix) {boolean temp = true;// 创建一个文件夹File file = new File(pathName);//如果存在的话进行删除存量数据
// if (file.exists())
// FileDeleteUtil.delFile(file); //这个我下面一块的代码,没加入的话就注释掉file.mkdirs();try {//多个图片下载地址for(int i=0;i<urls.length;i++) {//文件下载到本地downLoadFile(urls[i],pathName,suffix,i+"");}} catch (Exception e) {e.printStackTrace();temp = false;}return temp;}/*** @param urlName 文件下载目标地址* @param pathName 文件保存的路径* @param suffix 文件后缀* @param name 保存的名称* */public void downLoadFile(String urlName,String pathName,String suffix,String name) throws Exception {URL url = new URL(urlName);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5 * 1000);InputStream inStream = conn.getInputStream();byte[] data = readInputStream(inStream);File imageFile = new File(pathName+"/"+name+suffix);FileOutputStream outStream = new FileOutputStream(imageFile);outStream.write(data);outStream.close();inStream.close();}/**** 入口函数* @param urls 文件url路径数组* @param pathName 文件临时保存的路径* @param suffix 文件保存的后缀* @param errors 文件抛出的错误*/public void actionAddFile (String[] urls, String pathName, String suffix, List<String> errors) {// 创建一个文件夹File file = new File(pathName);//如果存在的话进行删除存量数据
// if (file.exists())
// FileDeleteUtil.delFile(file); //本文下面部分的代码,需要使用请先加入file.mkdirs();for (int i = 0; i < urls.length; i++) {try {//文件下载到本地downLoadFile(urls[i],pathName,suffix,i+"");} catch (Exception e) {errors.add(pathName+"|"+urls[i]+ "==错误信息:" +e.toString());}}}
}
本地文件打包
打zip包
本人亲写,绝对有效
public class FileZipUtil {public static void main(String[] args) {//使用方法1FileZipUtil zc = new FileZipUtil("F:/Test.zip");zc.compress("F:/cc","F:/image");//使用方法2FileZipUtil zc2 = new FileZipUtil();zc2.setZipFile("F:/Test.zip"); //也可以是文件对象zc2.compress("F:/cc");zc2.compress("F:/cc/image/1.jpg");//这两个方法都会按照原本文件的格式,路径,模板进行打包就和直接在电脑上右键打包效果一样//并且Liunx也可以哦 亲测有效}static final int BUFFER = 8192;private File zipFile;public FileZipUtil() {}public FileZipUtil(String pathName) {zipFile = new File(pathName);}public void setZipFile(String pathName) {this.zipFile = new File(pathName);}public void setZipFile(File file) {this.zipFile = file;}/*** 这个是入口函数 pathName多个文件的路径* */public void compress(String... pathName) {ZipOutputStream out = null;try {FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream 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);}out.close();} catch (Exception e) {throw new RuntimeException(e);}}public void compress(String srcPathName) {File file = new File(srcPathName);if (!file.exists())throw new RuntimeException(srcPathName + "不存在!");try {FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());ZipOutputStream out = new ZipOutputStream(cos);String basedir = "";compress(file, out, basedir);out.close();} catch (Exception e) {throw new RuntimeException(e);}}private void compress(File file, ZipOutputStream out, String basedir) {/* 判断是目录还是文件 */if (file.isDirectory()) {this.compressDirectory(file, out, basedir);} else {this.compressFile(file, out, basedir);}}/** 压缩一个目录 */private void compressDirectory(File dir, ZipOutputStream out, String basedir) {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) {if (!file.exists()) {return;}try {BufferedInputStream 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);}bis.close();} catch (Exception e) {throw new RuntimeException(e);}}
}
文件下载到浏览器
http连接进行点击下载到浏览器
本人亲写,绝对有效
本代码所用技术SpringBoot
也可以用原生Sevlet技术等等…
- 可以把 @GET和@Paht(“ssoDownload/file/{zipName}”) 这两个注释换成
@RequestMapping("") … - 可以把@Context这个注释去掉
- 可以把@JaxrsParameterDescribe这个注释去掉
- @PathParam(“zipName”) 可以换成 SpringBoot常用的写法
1)服务器端代码
@GET@Path("ssoDownload/file/{zipName}")public void ssoDownload(@Context HttpServletResponse response,@JaxrsParameterDescribe("需要下载的文件路径+文件名(包括后缀) 一次只能下载一个")@PathParam("zipName") String zipName) throws IOException {logger.info("============进行文件下载:是否删除原文件");OutputStream ous = null;InputStream ins = null;File file = new File(zipName);try {ins = new BufferedInputStream(new FileInputStream(file));response.reset();ous = new BufferedOutputStream(response.getOutputStream());byte[] bf = new byte[1024*8];int i = 0;while ((i = ins.read(bf)) != -1) {ous.write(i);}ous.flush();response.addHeader("Content-Disposition", "attachment;filename=" + file.getName());response.addHeader("Content-Length", "" + file.length());response.setContentType("application/octet-stream");} catch (IOException e) {e.printStackTrace();} finally {ins.close();ous.close();}}
2)浏览器端代码
//js代码
window.Open("上方的请求地址 如: localhost:80/ssoDownload/file/{zipName}"); //Open可能小写 问题不大 大概这样
本地文件操作
删除目录
/*** 这个类是专门用于删除文件夹的* @author LM* @date 2021-11-05 - 9:39*/
public class FileDeleteUtil {/*** 进行指定目录的删除 或文件的删除*@param index 目录对象* */public static void delFile(File index){if (index.isDirectory()){File[] files = index.listFiles();for (File in: files) {delFile(in);}}index.delete();}/*** 进行多目录的删除* */public static void delFile(String... fileNames) {for (int i = 0; i < fileNames.length; i++) {delFile(new File(fileNames[i]));}}/*** 进行单目录的删除* */public static void delFile(String fileName) {delFile(new File(fileName));}
}
java对服务器文件操作、获取,删除,下载相关推荐
- java里面的文件上传与下载
java里面的文件上传与下载 文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar commons-io.jar apache的commons-fileuplo ...
- 【Java 编程】文件操作,文件内容的读写—数据流
一.认识文件 1.什么是文件 平时说的文件一般都是指存储在硬盘上的普通文件 形如 txt, jpg, mp4, rar 等这些文件都可以认为是普通文件,它们都是在硬盘上存储的 在计算机中,文件可能是一 ...
- 读取别的服务器的文件,java读取服务器文件
java读取服务器文件 [2021-02-01 10:47:24] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/(\ ...
- 科普|不同协议下远程服务器文件上传_下载优劣对比
作为一个程序员,如果不知道如何进行远程服务器的文件上传与下载,实在是一件尴尬的事情.打开百度,搜索「远程服务器 上传下载」,你能得到 63,100,000 个搜搜结果,五花八门的操作方式的让人眼花缭乱 ...
- java流与文件——操作文件
[0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--操作文件 的相关知识: 0.2) for source code, please vi ...
- Java流与文件操作
Java流与文件操作 数据流的基本概念 总体流程图 文件相关操作 创建文件 获取文件的相关信息方法 目录的操作和文件删除 Java IO流原理 流的分类 FileInputStream FileOut ...
- java 读取远程文件并让浏览器下载
java 读取远程文件并让浏览器下载 @RequestMapping("/downLoadFile")@ResponseBodypublic ResponseEntity<b ...
- JAVA ftps设置_Java使用JSCH实现对FTPS服务器文件操作
SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式.SF ...
- java web fileupload_javaweb 文件上传(fileupload) 下载
1 文件上传 html中通过可以向服务器上传文件.不过后台需要手动解析请求,比较复杂,所以可以使用smartupload或apache的fileupload组件进行文件的上传.smartupload据 ...
最新文章
- Hadoop葵花宝典(一)
- mysql两者之间_sql between 语法与查询两者之间数据方法
- 防火墙未开启导致通过redis篡改.ssh/authorized_keys
- SQL_server_2000安装过程指导
- 360怎么看电脑配置_电脑速度慢怎么办?教你电脑速度慢的原因与解决方法
- 三、Python-列表
- Java 内部类
- mongodb 3.4 集群搭建升级版 五台集群
- Nginx的端口修改问题
- 【备份】golang开发环境搭建
- linux下的json解析工具jq的使用笔记
- Matlab:实现Fra圆孔衍射仿真
- 三菱FX3UFX2NFX1N PLC 模拟器模拟通信功能,模拟PLC实体
- python ffmpeg解码视频_利用python+ffmpeg合并B站视频及格式转换的实例代码
- 阿里云异步word转PDF
- 会员直推奖php程序_直推奖+对碰奖+*奖+互助奖+见点奖
- PyQt4转PyQt5心得
- 计算机管理任务类别103,win7系统如何查看电脑的历史开关机时间|win7系统怎么查询电脑开机后运行多长时间...
- 如何画五子棋棋盘c语言easyx,大佬们,用c++怎么画五子棋棋盘呢?
- 编辑时英文出现大间隔
热门文章
- springboot+vue项目合同申报系统java
- 高铁招计算机专业吗,开高铁是什么专业_哪些学校有高铁专业?
- freenas作无盘服务器,Freenas11.3 jail创建失败解决办法
- windows 7 优化快速设置参考(实测好用)
- ubuntu系统安装教程之启动盘制作
- 长期坐着使用计算机会导致,安全生产知识竞赛题库体力处理操作
- 数模赛常用外挂工具汇总(骚操作)
- 网易python笔试题_2017秋季网易校园招聘编程题和个人解答(python)
- 毕业设计房屋出租研究现状
- Android宠物寄养软件APP毕业设计