• 解压.zip,.tar.gz文件到指定目录,重命名文件


    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;
        }
  • 相关阅读:
    [Javascript] Use a custom sort function on an Array in Javascript
    [Unit Testing] Fundamentals of Testing in Javascript
    [WASM] Create a New Rust/Webpack Project using the rust-webpack Template
    [Adobe Analytics] Segments types
    win7系统远程连接其它计算机,并且向远程机传输文件
    移动应用数据统计分析平台汇总
    设计模式(策略模式)
    程序员与卓别林
    我的Android进阶之旅------>HTTP 返回状态值详解
    OSX: 真的吗?Mac OS X重大漏洞 改时钟获系统最高权限
  • 原文地址:https://www.cnblogs.com/learnapi/p/9815460.html
Copyright © 2020-2023  润新知