java解压文件、复制文件、删除文件代码示例
文章目录
- 删除文件:
- 创建目录
- 拷贝文件
- 解压zip文件
解压文件时,可以采用多线程的方式,下面上代码:
创建类
@Slf4j
public class FileOperation {private static Executor executor = Executors.newFixedThreadPool(20);//创建新文件的方法:public static File newFile(String fileUrl) {File file = new File(fileUrl);return file;}
删除文件:
public static boolean deleteFile(File file) {if (file == null) {return false;}if (!file.exists()) {return false;}if (file.isFile()) {return file.delete();} else {for (File newfile : file.listFiles()) {deleteFile(newfile);}}return file.delete();}/*** 删除文件** @param fileUrl 文件路径* @return 删除是否成功*/public static boolean deleteFile(String fileUrl) {File file = newFile(fileUrl);return deleteFile(file);}//参数为路径时为需要删除的文件路径public static boolean deleteFile(String fileUrl) {File file = newFile(fileUrl);return deleteFile(file);}
创建目录
public static boolean mkdir(File file) {if (file == null) {return false;}if (file.exists()) {return true;}return file.mkdirs();}/*** 创建目录** @param fileUrl 文件路径* @return 是否创建成功*/public static boolean mkdir(String fileUrl) {if (fileUrl == null) {return false;}File file = newFile(fileUrl);if (file.exists()) {return true;}return file.mkdirs();}
拷贝文件
/*** 拷贝文件** @param fileInputStream 文件输入流* @param fileOutputStream 文件输出流* @throws IOException io异常*/public static void copyFile(FileInputStream fileInputStream, FileOutputStream fileOutputStream) throws IOException {try {byte[] buf = new byte[4096]; //8k的缓冲区int len = fileInputStream.read(buf); //数据在buf中,len代表向buf中放了多少个字节的数据,-1代表读不到while (len != -1) {fileOutputStream.write(buf, 0, len); //读多少个字节,写多少个字节len = fileInputStream.read(buf);}} finally {if (fileInputStream != null) {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}if (fileOutputStream != null) {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 拷贝文件** @param src 源文件* @param dest 目的文件* @throws IOException io异常*/public static void copyFile(File src, File dest) throws IOException {FileInputStream in = new FileInputStream(src);FileOutputStream out = new FileOutputStream(dest);copyFile(in, out);}/*** 拷贝文件** @param srcUrl 源路径* @param destUrl 目的路径* @throws IOException io异常*/public static void copyFile(String srcUrl, String destUrl) throws IOException {if (srcUrl == null || destUrl == null) {return;}File srcFile = newFile(srcUrl);File descFile = newFile(destUrl);copyFile(srcFile, descFile);}
解压zip文件
/*** 文件解压缩** @param sourceFile 需要解压的文件* @param destDirPath 目的路径* @return 解压目录列表*/public static List<String> unzip(File sourceFile, String destDirPath) {ZipFile zipFile = null;Set<String> set = new HashSet<String>();// set.add("/");List<String> fileEntryNameList = new ArrayList<>();try {zipFile = new ZipFile(sourceFile, Charset.forName("GBK"));Enumeration<? extends ZipEntry> entries = zipFile.entries();while (entries.hasMoreElements()) {ZipEntry entry = (ZipEntry) entries.nextElement();String[] nameStrArr = entry.getName().split("/");String nameStr = "/";for (int i = 0; i < nameStrArr.length; i++) {if (!"".equals(nameStrArr[i])) {nameStr = nameStr + "/" + nameStrArr[i];set.add(nameStr);}}log.info("解压" + entry.getName());String zipPath = "/" + entry.getName();fileEntryNameList.add(zipPath);//如果是文件夹,就创建个文件夹if (entry.isDirectory()) {String dirPath = destDirPath + File.separator + entry.getName();File dir = FileOperation.newFile(dirPath);dir.mkdir();} else {//如果是文件,就先创建一个文件,然后用io流把内容拷过去File targetFile = new File(destDirPath + "/" + entry.getName());// 保证这个文件的父文件夹必须要存在if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}targetFile.createNewFile();// 将压缩文件内容写入到这个文件中InputStream is = null;FileOutputStream fos = null;try {is = zipFile.getInputStream(entry);fos = new FileOutputStream(targetFile);int len;byte[] buf = new byte[2048];while ((len = is.read(buf)) != -1) {fos.write(buf, 0, len);}} catch (Exception e) {// 关流顺序,先打开的后关闭if (fos != null) {try {fos.close();} catch (Exception e1) {log.error("关闭流失败:" + e1);}}if (is != null) {try {is.close();} catch (Exception e2) {log.error("关闭流失败:" + e2);}}}}}} catch (Exception e) {throw new RuntimeException("unzip error from ZipUtils", e);} finally {if (zipFile != null) {try {zipFile.close();} catch (IOException e) {e.printStackTrace();}}}for (String zipPath : fileEntryNameList) {executor.execute(new Runnable() {@Overridepublic void run() {if (FileUtil.isImageFile(FileUtil.getFileExtendName(zipPath))) {File file = new File(destDirPath + zipPath);File minFile = new File(destDirPath + FileUtil.getFileNameNotExtend(zipPath) + "_min." + FileUtil.getFileExtendName(zipPath));try {ImageOperation.thumbnailsImage(file, minFile, 300);} catch (IOException e) {e.printStackTrace();}}}});}List<String> res = new ArrayList<>(set);return res;}
其中ImageOperation.thumbnailsImage(file, minFile, 300);方法如下:
import net.coobird.thumbnailator.Thumbnails;import java.io.File;
import java.io.IOException;
public class ImageOperation {public static void thumbnailsImage(File inFile, File outFile, int imageSize) throws IOException {Thumbnails.of(inFile).size(imageSize, imageSize).toFile(outFile);}}
上面判断是否是图片文件的FileUtil.isImageFile方法:
public class FileUtil {public static final String[] IMG_FILE = {"bmp", "jpg", "png", "tif", "gif", "jpeg"};public static final String[] DOC_FILE = {"doc", "docx", "ppt", "pptx", "xls", "xlsx", "txt", "hlp", "wps", "rtf", "html", "pdf"};public static final String[] VIDEO_FILE = {"avi", "mp4", "mpg", "mov", "swf"};public static final String[] MUSIC_FILE = {"wav", "aif", "au", "mp3", "ram", "wma", "mmf", "amr", "aac", "flac"};public static final int IMAGE_TYPE = 1;public static final int DOC_TYPE = 2;public static final int VIDEO_TYPE = 3;public static final int MUSIC_TYPE = 4;public static final int OTHER_TYPE = 5;public static final int SHARE_FILE = 6;public static final int RECYCLE_FILE = 7;/*** 获取文件扩展名* @param fileName 文件名* @return 文件扩展名*/public static String getFileExtendName(String fileName) {if (fileName.lastIndexOf(".") == -1) {return "";}return fileName.substring(fileName.lastIndexOf(".") + 1);}/*** 判断是否为图片文件** @param extendName 文件扩展名* @return 是否为图片文件*/public static boolean isImageFile(String extendName) {for (int i = 0; i < IMG_FILE.length; i++) {if (extendName.equalsIgnoreCase(IMG_FILE[i])) {return true;}}return false;}}
java解压文件、复制文件、删除文件代码示例相关推荐
- java解压加密的7z格式文件
引言 最近在 项目中需要解压带有密码的.7z文件,然后获得里面的数据,之前都是zip 文件没有接触过解压7z类型的 文件,在这分享一下解压工具类,该 工具类可以同时解压带有密码的7z文件和zip文件. ...
- java解压zip_Java实现zip压缩文件的解压
需求描述: 前段时间写了一篇博客<Java实现对文本文件MD5加密并ftp传送到远程主机目录>,实现了一部分的业务需求.然而有些业务可能不止传送一个文件,有时候客户需要传多个文件,原有系统 ...
- java解压zip包_Java中文件的压缩与解压,每天进步一点点系列
使用java.util.zip包,实现文件的压缩与解压,并提供了下载方法 注意 无论是调用createNewFile()创建文件,还是在创建输出流时由输出流负责创建文件,都必须保证父路径已经存在,否则 ...
- Linux中文件复制、删除、移动、压缩、解压命令
Linux中文件复制.删除.移动.压缩.解压命令 复制 cp命令 命令:cp [-adfiprl]源文件或目录 目标文件或目录 说明:将指定源文件或目录复制到目标文件或目录 [选项]: -a 该选项通 ...
- java zip malformed_关于Java解压文件的一些坑及经验分享(MALFORMED异常)
关于Java解压文件的一些坑及经验分享 就在本周, 测试人员找到我说现上的需求文档(zip格式的)无法预览了, 让我帮忙看看怎么回事. 这个功能也并不是我做的, 于是我便先看看线上日志有没有什么错误, ...
- Java解压Jar文件
今天写点java解压jar文件的东西,以前项目中用到过,很简单... java中有专门的文件类型对应jar文件,那就是JarFile,用于从任何可以使用java.io.RandomAccessFile ...
- java 压缩 空目录_java zip压缩与解压-支持空目录,保留文件修改时间
java zip压缩与解压-支持空目录,保留文件修改时间. 依赖于commons-io,commons-compress [Java]代码 import java.io.BufferedInputSt ...
- java解压/读取rar文件
转自在此感谢作者:https://blog.csdn.net/lbf5210/article/details/51206642 <!-- 解压rar --> <dependency& ...
- java解压两层zip文件_Java解压缩zip - 解压缩多个文件或文件夹实例
java解压缩zip - 多个文件(包括文件夹),具体如下: 对多个文件和文件夹进行压缩,对复杂的文件目录进行解压. 压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参 ...
- JAVA 创建文件和文件夹,删除文件和文件夹,复制文件和文件夹,移动文件和文件夹的实用工具类
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
最新文章
- python基础04
- SDNU 1209.磊磊的随机数
- 恕我直言,90% 的应用场景都不需要用WebAssembly!
- python核心教程百度云_Python核心技术与实战 共44讲 中文pdf高清版
- [设计模式]策略模式
- iphone mac地址是否随机_iOS8随机MAC地址功能:需要满足前提要求
- mariadb使用mysql驱动_MariaDB安装与使用
- UVA 1152 4 Values Whose Sum is Zero 和为0的4个值 (中途相遇)
- ubuntukylin ubuntu1304
- 前沿技术分享,让你在算法圈“技”高一筹
- 机器学习书籍资料推荐
- 对比MySQL,一文看透HBase的能力及使用场景
- Python常用的字符串操作
- Webstorm—Webstorm汉化(图文详解)
- 推荐一款windows下好用的文件夹加密、文件加密软件(含使用说明)
- python画图matlab,matlab plot画图
- 中台和低代码,“零和”还是“竞合”?
- RecordRTC的视频录制,回放,截图,下载
- RefineDNet个人学习笔记
- golang远程桌面服务器,go+govcl+go-ole实现的windows远程桌面
热门文章
- android最大json,Android:解析大型JSON文件
- mysql底层用什么写的_天天写order by,你知道Mysql底层如何执行吗?
- linux邮件自动回复,debian上 postfix+dovecot+squirrelmail 实现 自动回复
- python 二维数组 长度_Python创建二维数组的正确姿势
- flash读取程序 msp430_MSP430单片机对片内FLASH的读写操作程序范例
- 【小白学习C++ 教程】一、Vscode和 Visual stdudio配置C++环境
- 七十一、Vue项目城市选择页搜索逻辑实现,边输入边搜索功能的解决办法:节流函数
- 梯度下降(Gradient Descent)的收敛性分析
- 当我们谈论「Chatbot」时,我们在读什么? | 论文集精选 #05
- 4.2 使用pytorch搭建VGG网络