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 文件工具类的更多相关文章

  1. java下载文件工具类

    java下载文件工具类 package com.skjd.util; import java.io.BufferedInputStream; import java.io.BufferedOutput ...

  2. FileUtils 文件工具类

    FileUtils 下载jar中的文件 package com.meeno.chemical.common.utils; import lombok.extern.slf4j.Slf4j; impor ...

  3. Java常用工具类---IP工具类、File文件工具类

    package com.jarvis.base.util; import java.io.IOException;import java.io.InputStreamReader;import jav ...

  4. java文件工具类

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  5. 自动扫描FTP文件工具类 ScanFtp.java

    package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  6. 读取Config文件工具类 PropertiesConfig.java

    package com.util; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io ...

  7. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  8. Java 实现删除文件工具类

    工具代码 package com.wangbo; import java.io.File; /** * 删除目录或文件工具类 * @author wangbo * @date 2017-04-11 1 ...

  9. Android FileUtil(android文件工具类)

    android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...

随机推荐

  1. Javascript模块规范

    因为有了模块,就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是有一个前提,就是大家必须以同样的方式编写模块. 目前,通行的Javascript模块规范共有两种:CommonJS和AMD ...

  2. 【转】Android自动化测试(UiAutomator)简要介绍

    一.一个BUG引发的问题   如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”.这个问题我们如何验证呢?我想,最好的方式应该是自动化测试.    那么,自动化测试可以完成哪些任务呢?  ...

  3. Hibernate使用Log4j日志记录(使用xml文件)

    日志记录使程序员能够将日志详细信息永久写入文件. Log4j和Logback框架可以在hibernate框架中使用来支持日志记录. 使用log4j执行日志记录有两种方法: 通过log4j.xml文件( ...

  4. response.sendRedirect 的功能是地址重定向(页面跳转)

    response.sendRedirect 的功能是地址重定向(页面跳转) 1.response.sendredirect(url); 新的页面并不能处理旧页面的pagecontext(request ...

  5. genymotion启动报错

    启动genymotion时提示 网络配置有问题,经检查是网卡virtualBox配置的问题,把ip设为自动获取即可 重新启动就可以了

  6. 009android初级篇之APP中使用系统相机相册等集成应用

    android应用中使用相机功能,大致有两种方式实现: 直接调用系统内部的相机程序,显示的也是系统预设的界面(简单,只有简单的拍照功能): 自己去implement一个相机程序(不难,较具备弹性,但相 ...

  7. redis配置详解(中英文)

    V2.8.21: (中英字幕同步) # Redis configuration file example#* Redis 配置文件例子 # Note on units: when memory siz ...

  8. python3 - 生成器genarator

    在Python中,这种一边循环一边计算的机制,称为生成器:generator. 生成器保存的是算法,每次调用 next() ,就计算出 下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出 ...

  9. Unity3d 重力感应

    Input.acceleration 加速度 最近一次测量的设备在三维空间中的线性加速度(只读); void Update () { v3=Input.acceleration; } void OnG ...

  10. xpath与css基本使用方法

    path使用方法 1.工具Firefox50版本以下,安装插件firebug.firepath