File处理
package com.cfets.ts.u.shchgateway.util; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map; import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.FileNameUtil;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import org.apache.commons.lang3.StringUtils; import com.cfets.ts.s.log.TsLogger; public class FileUtils {
private static final TsLogger logger = TsLogger.getLogger(FileUtils.class); public static final String fileSeparator = File.separator;
private static final int BUFFER = 1024; private FileUtils(){
} private static final FileNameUtil fileNameUtil; static {
final Map<String, String> uncompressSuffix = new LinkedHashMap<>();
uncompressSuffix.put(".tgz", ".tar");
uncompressSuffix.put(".taz", ".tar");
uncompressSuffix.put(".tar.bz2", ".tar");
uncompressSuffix.put(".tbz2", ".tar");
uncompressSuffix.put(".tbz", ".tar");
fileNameUtil = new FileNameUtil(uncompressSuffix, ".gz");
} /**
* Detects common gzip suffixes in the given filename.
*
* @param filename name of a file
* @return {@code true} if the filename has a common gzip suffix,
* {@code false} otherwise
*/
public static boolean isCompressedFilename(final String fileName) {
return fileNameUtil.isCompressedFilename(fileName);
} /**
* getUncompressedFilename
*
* @param filename name of a file
* @return name of the corresponding uncompressed file
*/
public static String getUncompressedFilename(final String fileName) {
return fileNameUtil.getUncompressedFilename(fileName);
} /**
* getCompressedFilename
*
* @param filename name of a file
* @return name of the corresponding compressed file
*/
public static String getCompressedFilename(final String fileName) {
return fileNameUtil.getCompressedFilename(fileName);
} /**
* getInputStream
*
* @param filePath
* @return
* @author huateng 2017年5月01日
*/
public static InputStream getInputStream(String filePath) {
BufferedInputStream localBufferedReader = null;
try {
localBufferedReader = new BufferedInputStream(new FileInputStream(filePath), 1024);
} catch (FileNotFoundException e) {
logger.error("init the file {} BufferedInputStream failed:{}", filePath, e.getMessage());
}
return localBufferedReader;
} /**
* delFile
*
* @param fileName
* @return
* @author huateng 2017年5月2日
*/
public static boolean delFile(String fileName) {
if (StringUtils.isEmpty(fileName)) {
return true;
}
return delFile(new File(fileName));
} /**
* delFile
*
* @param fileName
* @return
* @author huateng 2017年5月2日
*/
public static boolean delFile(File fileName) {
if (fileName.exists()) {
fileName.delete();
}
return true;
} /**
* mkDir
*
* @param directory
* @author huateng 2017年5月2日
*/
public static void mkDir(String directory) {
mkDir(new File(directory));
} /**
* mkDir
*
* @param directory
* @author huateng 2017年5月2日
*/
public static void mkDir(File directory) {
if (!directory.exists()) {
mkDir(directory.getParentFile());
directory.mkdir();
} else {
if (directory.isFile()) {
directory.delete();
directory.mkdir();
}
}
} /**
* normalize
*
* @param fileName
* @return
* @author huateng 2017年5月1日
*/
public static String normalize(String fileName) {
if (fileName == null) {
return null;
}
int size = fileName.length();
if (size == 0) {
return fileName;
}
if (!fileName.endsWith(FileUtils.fileSeparator)) {
return new StringBuffer(fileName).append(FileUtils.fileSeparator).toString();
}
return fileName;
} /**
* listFiles
*
* @param filePath
* @return
* @author huateng 2017年7月9日
*/
public static Collection<File> listFiles(String filePath){
if(StringUtils.isEmpty(filePath)){
return Collections.emptyList();
}
return org.apache.commons.io.FileUtils.listFiles(new File(filePath), null, true);
} /**
* getName
*
* @param fileName
* @return
* @author huateng 2017年7月9日
*/
public static String getName(String fileName){
return org.apache.commons.io.FilenameUtils.getName(fileName);
} /**
* getName
*
* @param file
* @return
* @author huateng 2017年7月9日
*/
public static String getName(File file){
if (file == null) {
return null;
}
return org.apache.commons.io.FilenameUtils.getName(file.getName());
} /**
* getExtension
*
* @param fileName
* @return
* @author huateng 2017年7月9日
*/
public static String getExtension(String fileName){
return org.apache.commons.io.FilenameUtils.getExtension(fileName);
} /**
* getBaseName
*
* @param fileName
* @return
* @author huateng 2017年7月9日
*/
public static String getBaseName(String fileName){
return org.apache.commons.io.FilenameUtils.getBaseName(fileName);
}
/**
* unCompressBz2
*
* @param src
* @param dest
*
* @author huateng 2017年5月2日
* @throws IOException
*/
public static void unCompressBz2(String src, String dest) throws IOException {
FileOutputStream out = null;
BZip2CompressorInputStream bzIn = null;
File file = new File(src);
if (!file.exists()) {
logger.error("the file {} not exists when uncompress the file {} to the tar file {} failed", src, src, dest);
throw new IOException("file not exists :" + src);
}
try {
out = new FileOutputStream(dest);
bzIn = new BZip2CompressorInputStream(new BufferedInputStream(new FileInputStream(file)));
final byte[] buffer = new byte[BUFFER];
int n = 0;
while (-1 != (n = bzIn.read(buffer))) {
out.write(buffer, 0, n);
}
logger.info("uncompress the file {} to the file {} succeed", src, dest);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
logger.error("close FileOutputStream when uncompress the file {} failed:{}", src, e);
}
try {
if (bzIn != null) {
bzIn.close();
}
} catch (IOException e) {
logger.error("close BZip2CompressorInputStream when uncompress the file {} failed:{}", src, e);
}
}
} /**
* unCompressTgz
*
* @param src
* @param dest
* @return
* @author huateng 2017年5月2日
* @throws IOException
*/
public static void unCompressTgz(String src, String dest) throws IOException {
FileOutputStream out = null;
GzipCompressorInputStream gzIn = null;
File file = new File(src);
if (!file.exists()) {
logger.error("The file {} not exists when uncompress the file {} to the tar file {} failed", src, src, dest);
throw new IOException("file not exists :" + src);
}
try {
out = new FileOutputStream(dest);
gzIn = new GzipCompressorInputStream(new BufferedInputStream(new FileInputStream(file)));
final byte[] buffer = new byte[BUFFER];
int n = 0;
while (-1 != (n = gzIn.read(buffer))) {
out.write(buffer, 0, n);
}
logger.info("uncompress the tgz file {} to the file {} succeed", src, dest);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
logger.error("close FileOutputStream when uncompress the file {} failed: {}", src, e);
}
try {
if (gzIn != null) {
gzIn.close();
}
} catch (IOException e) {
logger.error("close GzipCompressorInputStream when uncompress the file {} failed: {}", src, e);
}
}
} /**
* unCompressTar
*
* @param src
* @param dest
* @return int
* @author huateng 2017年5月1日
* @throws IOException
*/
public static int unCompressTar(String src, String dest) throws IOException { TarArchiveInputStream tais = null;
TarArchiveEntry entry = null;
try {
tais = new TarArchiveInputStream(new FileInputStream(new File(src)));
} catch (FileNotFoundException e) {
logger.error("init TarArchiveInputStream when dearchiving the file {} failed: {}", src, e);
throw new IOException("file not exists :" + src, e);
}
int fileCount = 0;
try {
while ((entry = tais.getNextTarEntry()) != null) {
String entryName = entry.getName();
if (StringUtils.isEmpty(entryName)) {
continue;
}
String actualFileName = dest + entryName;
File actualFile = new File(actualFileName);
if (entry.isDirectory()) {
actualFile.mkdirs();
} else {
fileCount++;
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(actualFile));
int count;
byte data[] = new byte[BUFFER];
try {
while ((count = tais.read(data, 0, BUFFER)) != -1) {
bos.write(data, 0, count);
}
} finally {
try {
if (bos != null) {
bos.close();
}
} catch (IOException e) {
logger.error(
"close BufferedOutputStream when uncompressing the file {} in the src {} failed:{}",
actualFileName, src, e);
}
}
} catch (FileNotFoundException e) {
logger.error(
"init BufferedOutputStream when uncompressing the file {} in the file {} failed: {}",
entryName, src, e);
throw new IOException("file not exists :" + actualFile, e);
}
}
}
} finally {
if (tais != null) {
try {
tais.close();
tais = null;
} catch (IOException e) {
logger.error("close TarArchiveInputStream {} when upload failed: {}", src, e.getMessage());
}
}
}
logger.info("dearchive the file {} to the path {} succeed", src, dest);
return fileCount;
} public static void main(String[] str) throws IOException { } }
File处理的更多相关文章
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- HTML中上传与读取图片或文件(input file)----在路上(25)
input file相关知识简例 在此介绍的input file相关知识为: 上传照片及文件,其中包括单次上传.批量上传.删除照片.增加照片.读取图片.对上传的图片或文件的判断,比如限制图片的张数.限 ...
- logstash file输入,无输出原因与解决办法
1.现象 很多同学在用logstash input 为file的时候,经常会出现如下问题:配置文件无误,logstash有时一直停留在等待输入的界面 2.解释 logstash作为日志分析的管道,在实 ...
- input[tyle="file"]样式修改及上传文件名显示
默认的上传样式我们总觉得不太好看,根据需求总想改成和上下结构统一的风格…… 实现方法和思路: 1.在input元素外加a超链接标签 2.给a标签设置按钮样式 3.设置input[type='file' ...
- .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍
1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...
- [笔记]HAproxy reload config file with uninterrupt session
HAProxy is a high performance load balancer. It is very light-weight, and free, making it a great op ...
- VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%
1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时,出现以下问题: # odbcexec: "gcc": executabl ...
- input type='file'上传控件假样式
采用bootstrap框架样式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...
- FILE文件流的中fopen、fread、fseek、fclose的使用
FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...
- ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id
出现场景:当点击"分类"再返回"首页"时,发生error退出 BUG描述:Caused by: java.lang.IllegalArgumentExcep ...
随机推荐
- STM32中断定时,控制LED灯
#include "led.h" void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBas ...
- 网络编程初探--使用UDP协议的简易聊天室
UDP是一种无连接的传输层协议,提供快速不可靠的服务. 一.发送端 * 创建UDP发送端 * 步骤: * 1.建立UDP的Socket服务 * 2.将要发送的数据封装到数据包中 * 3.通过UDP的s ...
- JAVA爬取百度贴吧图片
package com.wang.xiaowei.utils; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.code ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
转载至:https://blog.csdn.net/wo541075754/article/details/75208955 lock-on-active 当在规则上使用ruleflow-group属 ...
- Django中提供了6种缓存方式
开发调试 内存 文件 数据库 Memcache缓存(python-memcached模块) Memcache缓存(pylibmc模块) 1. 开发调试 1 2 3 4 5 6 7 8 9 10 11 ...
- solr 6.2.1环境搭建
一:Solr简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过 ...
- mysql的一些 参数查询
1 查询 事务 超时时间: SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout'; (默认innodb引擎事务的超时时间) 2 查询事务隔离级别 ...
- Java Web Service 学习笔记
一.服务端 1. 创建Java工程 2. 创建接口HostipalServiceInterface package ws_server; import javax.jws.WebMethod; imp ...
- golang 自定义类型的排序sort
sort包中提供了很多排序算法,对自定义类型进行排序时,只需要实现sort的Interface即可,包括: func Len() int {... } func Swap(i, j int) {... ...
- JZ2440 裸机驱动 第8章 NAND Flash控制器
本章目标 了解NAND Flash 芯片的接口 掌握通过NAND Flash控制器访问NAND Flash的方法 8.1 NAND Flash介绍和NAND Flash控制器使用 NAND ...