1.解压文件到指定目录

/**
* 解压文件到指定目录
* zipFile:要解压的文件
* descDir:解压到哪个文件
*
*/
@SuppressWarnings("rawtypes")
public static void unZipFiles(File zipFile,String descDir)throws IOException
{
File pathFile = new File(descDir);
if(!pathFile.exists())
{
pathFile.mkdirs();
}
//解决zip文件中有中文目录或者中文文件
ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));
for(Enumeration entries = zip.entries(); entries.hasMoreElements();)
{
ZipEntry entry = (ZipEntry)entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;
//判断路径是否存在,不存在则创建文件路径
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if(!file.exists())
{
file.mkdirs();
}
//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
if(new File(outPath).isDirectory())
{
continue;
}
//输出文件路径信息
System.out.println(outPath);
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while((len=in.read(buf1))>0)
{
out.write(buf1,0,len);
}
in.close();
out.close();
}
System.out.println("******************解压完毕********************");
}

解压tar.gz 文件

package com.hou;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream; import org.apache.tools.tar.TarEntry;
import org.apache.tools.tar.TarInputStream; /**
* 解压tar.gz 文件
* ClassName: Test01
* @Description: TODO
* @author HJJ
* @date 2018年10月17日
*/
public class Test01 { public static void main(String[] args) {
File file=new File("D:/home/app/data/tiantai/new/pred_2018-10-15.tar.gz");
String str="D:/home/app/data/tiantai/new/";
try {
unTarGz(file,str);
System.out.println("解压成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //------------------------------------------------------------------------------------------------------
/**
* 解压tar.gz 文件
* @param file 要解压的tar.gz文件对象
* @param outputDir 要解压到某个指定的目录下
* @throws IOException
*/
public static void unTarGz(File file,String outputDir) throws IOException{
TarInputStream tarIn = null;
try{
tarIn = new TarInputStream(new GZIPInputStream(
new BufferedInputStream(new FileInputStream(file))),
1024 * 2); createDirectory(outputDir,null);//创建输出目录 TarEntry entry = null;
while( (entry = tarIn.getNextEntry()) != null ){ if(entry.isDirectory()){//是目录
entry.getName();
createDirectory(outputDir,entry.getName());//创建空目录
}else{//是文件
File tmpFile = new File(outputDir + "/" + entry.getName());
createDirectory(tmpFile.getParent() + "/",null);//创建输出目录
OutputStream out = null;
try{
out = new FileOutputStream(tmpFile);
int length = 0; byte[] b = new byte[2048]; while((length = tarIn.read(b)) != -1){
out.write(b, 0, length);
} }catch(IOException ex){
throw ex;
}finally{ if(out!=null)
out.close();
}
}
}
}catch(IOException ex){
throw new IOException("解压归档文件出现异常",ex);
} finally{
try{
if(tarIn != null){
tarIn.close();
}
}catch(IOException ex){
throw new IOException("关闭tarFile出现异常",ex);
}
}
} /**
* 构建目录
* @param outputDir
* @param subDir
*/
public static void createDirectory(String outputDir,String subDir){
File file = new File(outputDir);
if(!(subDir == null || subDir.trim().equals(""))){//子目录不为空
file = new File(outputDir + "/" + subDir);
}
if(!file.exists()){
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
file.mkdirs();
}
} }

3.解压指定目录下的zip文件

/**
* 解压指定目录下的zip文件
* @param checkPath 检测目录,先从缓存中取,如果缓存中不存在,再从配置文件中提取
* @param fileName 待解压的zip文件
* @throws Exception
*/
private static void unzip(String checkPath,String fileName) throws Exception { if (checkPath.startsWith("~")) {
checkPath = System.getProperty("user.home")+ checkPath.substring(1);
} // final String currentPath = checkPath;
final String currentPath = "D:/home/app/data/tiantai/new/"; // String fileRoot = checkPath + File.separator + fileName; //zip文件路径
String fileRoot = "D:/home/app/data/tiantai/new/QUNAR_ONE_COMMON_PRYPAY_1539141468602.zip"; //zip文件路径
//System.out.println("解压的zip文件 fileRoot:" + fileRoot);
System.out.println("解压的zip文件 fileRoot:" + fileRoot); FileSystem fs = FileSystems.newFileSystem(Paths.get(fileRoot),null); Files.walkFileTree(fs.getPath("/"),new SimpleFileVisitor<Path>(){ //遍历文件系统时,可获取文件属性
/**
* Invoked for a file in a directory.
* <p>
* <p> Unless overridden, this method returns {@link FileVisitResult#CONTINUE
* CONTINUE}.
*
* @param file
* @param attrs
*/
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Path destPath = Paths.get(currentPath,file.toString());
Files.deleteIfExists(destPath);//如果目标文件已经存在,则删除
Files.createDirectories(destPath.getParent());//创建文件的父目录,不管是文件还是目录
Files.move(file, destPath); return FileVisitResult.CONTINUE;
}
}); fs.close();//关闭文件系统 //文件解压成功后,删除zip文件
File delZipFile = new File(fileRoot);
if(delZipFile.exists() && delZipFile.isFile()){
boolean d = delZipFile.delete();
if(d){
// System.out.println(fileRoot + " 文件已删除...");
System.out.println((fileRoot + " 文件已删除...")); } } }

4.

public static void Decompressing2() throws IOException {
// String path = "D:/home/app/data/tiantai/new/";
String path = "D:/home/app/data/tiantai/new/";
ZipEntry zipEntry = null;
try {
// ZipInputStream读取压缩文件
FileInputStream file=new FileInputStream(new File(path+"QUNAR_ONE_COMMON_PRYPAY_1539679543536.zip"));
// ZipFile zipFile = new ZipFile(new File(path+"QUNAR_ONE_COMMON_PRYPAY_1539141468602.zip"),Charset.forName("gbk")) ;
ZipInputStream zipInputStream = new ZipInputStream(file);
// 写入到缓冲流中
BufferedInputStream bufferedInputStream = new BufferedInputStream(zipInputStream);
File fileOut = null;
// 读取压缩文件中的一个文件
// zipEntry = zipInputStream.getNextEntry();
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
// 若当前zipEntry是一个文件夹
if (zipEntry.isDirectory()) {
fileOut = new File(path + "//" +zipEntry.getName());
// 在指定路径下创建文件夹
if (!fileOut.exists()) {
fileOut.mkdirs();
}
//若是文件
} else {
// 原文件名与指定路径创建File对象(解压后文件的对象)
fileOut = new File(path, zipEntry.getName());
try(
FileOutputStream fileOutputStream = new FileOutputStream(fileOut);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);){
//将文件写入到指定file中
int b = 0;
while ((b = bufferedInputStream.read()) != -1) {
bufferedOutputStream.write(b);
}
}catch (Exception e) {
e.printStackTrace();
}
} } } catch (Exception e) {
e.printStackTrace();
}
}

5

readByZipInputStream("D:/home/app/data/tiantai/new/QUNAR_ONE_COMMON_PRYPAY_1539065367654.zip", "d:/");

public static void readByZipInputStream(String archive, String decompressDir)
throws FileNotFoundException, IOException {
BufferedInputStream bi; ZipFile zf = new ZipFile(archive, Charset.forName("gbk"));//支持中文 Enumeration e = zf.entries();
while (e.hasMoreElements()) {
ZipEntry ze2 = (ZipEntry) e.nextElement();
String entryName = ze2.getName();
String path = decompressDir + "/" + entryName;
if (ze2.isDirectory()) {
System.out.println("正在创建解压目录 - " + entryName);
File decompressDirFile = new File(path);
if (!decompressDirFile.exists()) {
decompressDirFile.mkdirs();
}
} else {
System.out.println("正在创建解压文件 - " + entryName);
String fileDir = path.substring(0, path.lastIndexOf("/"));
File fileDirFile = new File(fileDir);
if (!fileDirFile.exists()) {
fileDirFile.mkdirs();
}
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(
decompressDir + "/" + entryName)); bi = new BufferedInputStream(zf.getInputStream(ze2));
byte[] readContent = new byte[1024];
int readCount = bi.read(readContent);
while (readCount != -1) {
bos.write(readContent, 0, readCount);
readCount = bi.read(readContent);
}
bos.close();
}
}
zf.close();
}

6.修改文件名

/**
* 通过文件路径直接修改文件名
* @param filePath 需要修改的文件的完整路径
* @param newFileName 需要修改的文件的名称
* @return
*/
public static String FixFileName(String filePath, String newFileName) {
File f = new File(filePath);
if (!f.exists()) { // 判断原文件是否存在
return null;
} newFileName = newFileName.trim();
if ("".equals(newFileName) || newFileName == null) // 文件名不能为空
return null; String newFilePath = null;
if (f.isDirectory()) { // 判断是否为文件夹
newFilePath = filePath.substring(0, filePath.lastIndexOf("/")) + "/" + newFileName;
} else {
newFilePath = filePath.substring(0, filePath.lastIndexOf("/"))+ "/" + newFileName ;
}
File nf = new File(newFilePath);
if (!f.exists()) { // 判断需要修改为的文件是否存在(防止文件名冲突)
return null;
} try {
f.renameTo(nf); // 修改文件名
} catch(Exception err) {
err.printStackTrace();
return null;
} return newFilePath;
}

解压.zip,.tar.gz文件到指定目录,重命名文件的更多相关文章

  1. linux中解压.tgz, .tar.gz ,zip ,gz, .tar文件

    转载:https://blog.csdn.net/fu6543210/article/details/7984578 将.tgz文件解压在当前目录: tar zxvf MY_NAME.tgz 将.ta ...

  2. zz 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件

    January 2nd, 2009 at 10:31 pm Linux 解压, Linux, tar, tar.bz2, tar.gz, tgz, zip, 压缩, 打包, 文档 这么多年来,数据压缩 ...

  3. 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件

    这么多年来,数据压缩对我们来说是非常有用的.无论是在邮件中发送的图片用的zip文件还是在服务器压缩数据文件,我们都可以让下载更容易或者有效的节约磁盘空间.某些压缩格式有时允许我们以60%的比率(甚至更 ...

  4. tar命令解压jdk.tar.gz包 报错 gzip: stdin: not in gzip format

    转自:https://blog.csdn.net/LL_zhuo/article/details/44173355 遇到和这篇博文一样的问题了.用wget 从oracle官网下载jdk, http:/ ...

  5. linux下tar gz bz2 tgz z等众多压缩文件的压缩与解压方法

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...

  6. java解压缩.gz .zip .tar.gz等格式的压缩包方法总结

    1..gz文件是linux下常见的压缩格式.使用 java.util.zip.GZIPInputStream即可,压缩是 java.util.zip.GZIPOutputStream public s ...

  7. winform复制文件到指定目录

    执行步骤 弹出选择对话框:var openFileDialog = new OpenFileDialog(); 设置选择内容,如所有图片:openFileDialog.Filter="图像文 ...

  8. Perl复制、移动、重命名文件/目录

    File::Copy复制文件 File::Copy模块提供了copy函数和cp函数来复制文件,它们参数上完全一致,但行为上稍有区别. 用法大致如下: use File::Copy qw(copy cp ...

  9. 怎样用bat批量重命名文件夹和文件

    很早以前本人写过重命名文件夹的文章,发现其中稍有不完善的地方,其主要功能在文件夹名前统一加上字符,或者在文件夹名后统一加上字符,有网友反应功能太单一.今天我又仔细研究了一下bat批处理代码,分别能完全 ...

随机推荐

  1. ssh无密码登录设置

    为啥要设置ssh无密码登录? 我们先来看一下分布式系统的一键启动流程, 在matser机器上运行脚本,脚本检测有多少slavers,然后通过ssh登录到slavers,进入到相同的目录(或者通过$XX ...

  2. JVM内存四大类型:Heap,Stack,Contant,DirectMemory等

    Stack属于栈的区域,属于每条线程私有的. 方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的代码,本地方法栈指向的是C/C++. Java开发,对象就在堆中,一般而言,堆中只有对象. ...

  3. nginx的相关信息

    Nginx安装 nginx官网:https://nginx.org/ 安装准备:nginx依赖pcre库,要先安装pcre(nginx在rewrite时需要解析正则,PCRE是正则解析库) yum i ...

  4. 使用jQuery为文本框、单选框、多选框、下拉框、下拉多选框设值及返回值的处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. python爬虫中文乱码解决方法

    python爬虫中文乱码 前几天用python来爬取全国行政区划编码的时候,遇到了中文乱码的问题,折腾了一会儿,才解决.现特记录一下,方便以后查看. 我是用python的requests和bs4库来实 ...

  6. Linux系统——硬链接与软链接

    文件属性软硬连接: 链接有两种,一种为硬链接(Hard Link),另一种为软链接或符号链接(Symbolic Link或Soft Link). 建立硬链接时,链接文件和被链接文件必须位于同一个文件系 ...

  7. centos6.8安装zabbix

    前后用了两台电脑来实验,前后画风不一样,请忽略 一.安装php环境 移除目前系统安装的 PHP 组件 yum remove php* -y 安装 PHP 的 YUM 源  rpm -Uvh http: ...

  8. Myeclipse中is missing required source folder问题的解决

    最近在开发中,有好几次遇到is missing required source folder的问题,但是有些同事机器上却没有该问题,把整个工程删掉,重新从SVN上拿下来,问题依旧存在. 该问题出现后, ...

  9. iClap助力移动互联网企业实现规范化管理

    移动互联网的迅速崛起,智能移动客户端深刻而全面地影响着人类生活与工作习惯.而企业办公已从原始的纸张办公,到固定PC办公,跨入到一个应用范围更广.效率更高的移动办公时代.由静生动,让企业办公更加人性化和 ...

  10. Winter-2-STL-B Brackets 解题报告及测试数据

    Time Limit:2000MS     Memory Limit:65536KB Description Given a string consisting of brackets of two ...