java FileUtils 文件工具类
package com.sicdt.library.core.utils; import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* <br>类 名: FileUtils
* <br>描 述: 描述类完成的主要功能
* <br>作 者: shizhenwei
* <br>创 建: 2017年5月15日
* <br>版 本: v0.0.2
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
public class FileUtils { private Logger log = LoggerFactory.getLogger(FileUtils.class); private File file; public FileUtils(File file) {
this.file = file;
} public FileUtils(String pathname) {
this(new File(pathname));
} public static FileUtils create(String pathname) {
return new FileUtils(pathname);
} public static FileUtils create(File file) {
return new FileUtils(file);
} /**
* 获取不带扩展名的文件名
* @return
*/
public String getNameWithOutSuffix() {
String name = file.getName();
if(!file.isFile()) return name;
int flag = name.lastIndexOf(".");
if(flag != -1){
return name.substring(0, flag);
}
return name;
} /**
* 获取文件扩展名
* @return
*/
public String getSuffix(){
if(!file.isFile()) return "";
String name = file.getName();
int flag = name.lastIndexOf(".");
if(flag != -1){
return name.substring(flag + 1).toLowerCase();
}
return "";
} /**
* 获取当前文件所在文件夹路径
* @return
*/
public String getFolderPath() {
File parent = file.getParentFile();
if(parent == null || !parent.exists()){
return File.separator;
}
return parent.getAbsolutePath();
} /**
* 将文件复制到
* @param pathname 文件夹名称
* @return
*/
public File copyTo(String pathname) {
File targetFile = new File(pathname);
if(file.isDirectory()){
if(!targetFile.exists() || !targetFile.isDirectory()){
targetFile.mkdirs();
}
log.info("Copy folder to: " + pathname);
File[] childFiles = file.listFiles();
if(childFiles != null && childFiles.length > 0){
for(File childFile: childFiles){
String targetpath = targetFile.getAbsolutePath() + File.separator + childFile.getName();
FileUtils childUtils = FileUtils.create(childFile);
childUtils.copyTo(targetpath);
}
}
}else{
try(InputStream input = new FileInputStream(file);
OutputStream output = new FileOutputStream(targetFile);){
IOUtils.copy(input, output);
log.info("Copy file to: " + pathname);
}catch(IOException e){
e.printStackTrace();
return null;
}
}
return targetFile;
} public boolean exist() {
return file.exists();
} /**
* 压缩至文件夹
* @param foldername
* @return
*/
public File zipTo(String foldername, String zipname) {
if(StringUtils.isEmpty(zipname)){
zipname = getNameWithOutSuffix() + ".zip";
}
File targetFolder = new File(foldername);
if(!targetFolder.exists() || !targetFolder.isDirectory()){
targetFolder.mkdirs();
}
File targetFile = new File(targetFolder.getAbsolutePath() + File.separator + zipname);
try(FileOutputStream output = new FileOutputStream(targetFile);
CheckedOutputStream cos = new CheckedOutputStream(output, new CRC32());
ZipOutputStream zipout = new ZipOutputStream(cos);){
compress(file, zipout, "");
return targetFile;
}catch(Exception e){
log.error("文件压缩失败:" + targetFile.getAbsolutePath());
return null;
}
} private void compress(File zipfile, ZipOutputStream out, String basedir) {
if(zipfile.isDirectory()){
File[] files = zipfile.listFiles();
for(File childFile: files){
compress(childFile, out, basedir + zipfile.getName() + "/");
}
}else{
try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream(zipfile));){
ZipEntry entry = new ZipEntry(basedir + zipfile.getName());
out.putNextEntry(entry);
IOUtils.copy(bis, out);
}catch(Exception e){
log.error("压缩失败:" + zipfile.getAbsolutePath() + ": " + e.getMessage(), e);
}
}
} public void delete(){
delete(file);
} private boolean delete(File file) {
if (file.isDirectory()) {
String[] children = file.list();
for (int i=0; i<children.length; i++) {
boolean success = delete(new File(file, children[i]));
if (!success) {
return false;
}
}
}
return file.delete();
} /**
* 获取文件MD5
* @return
*/
public String md5() {
return MD5Utils.getFileMD5String(file);
}
}
java FileUtils 文件工具类的更多相关文章
- java下载文件工具类
java下载文件工具类 package com.skjd.util; import java.io.BufferedInputStream; import java.io.BufferedOutput ...
- FileUtils 文件工具类
FileUtils 下载jar中的文件 package com.meeno.chemical.common.utils; import lombok.extern.slf4j.Slf4j; impor ...
- Java常用工具类---IP工具类、File文件工具类
package com.jarvis.base.util; import java.io.IOException;import java.io.InputStreamReader;import jav ...
- java文件工具类
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- 自动扫描FTP文件工具类 ScanFtp.java
package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- 读取Config文件工具类 PropertiesConfig.java
package com.util; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- Java 实现删除文件工具类
工具代码 package com.wangbo; import java.io.File; /** * 删除目录或文件工具类 * @author wangbo * @date 2017-04-11 1 ...
- Android FileUtil(android文件工具类)
android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...
随机推荐
- FreeBSD Try to set MAKE_JOBS_UNSAFE=yes and rebuild before
FreeBSD Try to set MAKE_JOBS_UNSAFE=yes and rebuild before,玛德,FreeBSD安装软件就是蛋疼~ mark In some ports th ...
- [转]为什么我说ORM是一种反模式
原文地址:http://www.nowamagic.net/librarys/veda/detail/2217 上周我在在上讨论了ORM,在那以后有人希望我澄清我的意思.事实上,我曾经写文章讨论过OR ...
- 个人博客开发之 全局配置文件settings设置
项目源码下载:http://download.vhosts.cn # -*- coding: utf-8 -*- """ Django settings for cpyb ...
- Linux gdb调试器
gdb的启动 --gdb 程序名 [corefile] --corefile是可选的,但能增强gdb的调试能力 --强调:启动gdb必须在编译命里加上"-g"参数,"-g ...
- Linux 常用文件管理命令
Command Description cat filename 查看文件内容.举例:cat pushticketfast.sh --最好用tail -n 500 cd dirname 改变所在 ...
- 同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: ...
- 【Unity】基于MVC模式的背包系统 UGUI实现
前言 本文基于MVC模式,用UGUI初步实现了背包系统. Control层包括了点击和拖拽两种逻辑. 博文首发:http://blog.csdn.net/duzixi 下载地址:https://git ...
- springboot1.4下hystrix dashboard Unable to connect to Command Metric Stream解决办法
搜索了好多资料,最后查看了官网.但是还是解决了.和大家分享下喜悦心情 在 此项目properties中添加如下信息 修改完信息后再浏览器输入:http://localhost:9875/hystrix ...
- Python类基础知识(面向对象基础)
#首先 我们需要了解 面向过程是什么 面向对象是什么 我们为什么需要使用面向对象 面向过程:根据业务逻辑从上到下写垒代码 面向对象:根据代码对函数进行分类和封装 区别:解决问题的逻辑不同,但是都能解决 ...
- codevs 必做:堆:1245、2879 并查集:1069、1074、1073
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...