java操作文件类 (文件解压缩 文件增删改查)详解编程语言

import java.io.File; 
  
import java.io.FileInputStream; 
  
import java.io.FileOutputStream; 
  
import java.io.IOException; 
  
import java.io.InputStream; 
  
import java.util.Enumeration; 
  
import org.apache.tools.zip.ZipEntry; 
  
import org.apache.tools.zip.ZipFile; 
  
import org.apache.tools.zip.ZipOutputStream; 
  
import org.slf4j.Logger; 
  
import org.slf4j.LoggerFactory; 
  
/** 
 * 压缩,解压,删除,拷贝操作。 
  
 * 注意:此类中用到的压缩类ZipEntry等都来自于org.apache.tools包而非java.util。此包在ant.jar中有。 
 * 
 * * @author Tony 
 */ 
  
public class FileUtil { 
  
    protected static Logger log = LoggerFactory.getLogger(FileUtil.class); 
  
    /** 
     * 
     * 压缩文件 
     * 
     * @param inputFileName 
     *            要压缩的文件或文件夹路径,例如:c://a.txt,c://a/ 
     * 
     * @param outputFileName 
     *            输出zip文件的路径,例如:c://a.zip 
     * 
     */ 
  
    public static void zip(String inputFileName, String outputFileName) 
    throws Exception { 
  
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream( 
                    outputFileName)); 
  
        zip(out, new File(inputFileName), ""); 
  
        log.debug("压缩完成!"); 
  
        out.closeEntry(); 
  
        out.close(); 
  
    } 
  
    /** 
     * 
     * 压缩文件 
     * 
     * @param out 
     *            org.apache.tools.zip.ZipOutputStream 
     * 
     * @param file 
     *            待压缩的文件 
     * 
     * @param base 
     *            压缩的根目录 
     * 
     */ 
  
    private static void zip(ZipOutputStream out, File file, String base) 
    throws Exception { 
  
        if (file.isDirectory()) { 
  
            File[] fl = file.listFiles(); 
  
            base = base.length() == 0 ? "" : base + File.separator; 
  
            for (int i = 0; i < fl.length; i++) { 
  
                zip(out, fl[i], base + fl[i].getName()); 
  
            } 
  
        } else { 
  
            out.putNextEntry(new ZipEntry(base)); 
  
            log.debug("添加压缩文件:" + base); 
  
            FileInputStream in = new FileInputStream(file); 
  
            int b; 
  
            while ((b = in.read()) != -1) { 
  
                out.write(b); 
  
            } 
  
            in.close(); 
  
        } 
  
    } 
  
    /** 
     * 
     * 解压zip文件 
     * 
     * @param zipFileName 
     *            待解压的zip文件路径,例如:c://a.zip 
     * 
     * @param outputDirectory 
     *            解压目标文件夹,例如:c://a/ 
     * 
     */ 
  
    public static void unZip(String zipFileName, String outputDirectory) 
    throws Exception { 
  
        ZipFile zipFile = new ZipFile(zipFileName); 
  
        try { 
  
            Enumeration<?> e = zipFile.getEntries(); 
  
            ZipEntry zipEntry = null; 
  
            createDirectory(outputDirectory, ""); 
  
            while (e.hasMoreElements()) { 
  
                zipEntry = (ZipEntry) e.nextElement(); 
  
                log.debug("解压:" + zipEntry.getName()); 
  
                if (zipEntry.isDirectory()) { 
  
                    String name = zipEntry.getName(); 
  
                    name = name.substring(0, name.length() - 1); 
  
                    File f = new File(outputDirectory + File.separator + name); 
  
                    f.mkdir(); 
  
                    log 
                    .debug("创建目录:" + outputDirectory + File.separator 
                           + name); 
  
                } else { 
  
                    String fileName = zipEntry.getName(); 
  
                    fileName = fileName.replace('//', '/'); 
  
                    if (fileName.indexOf("/") != -1) { 
  
                        createDirectory(outputDirectory, fileName.substring(0, 
                                        fileName.lastIndexOf("/"))); 
  
                        fileName = fileName.substring( 
                                       fileName.lastIndexOf("/") + 1, fileName 
                                       .length()); 
  
                    } 
  
                    File f = new File(outputDirectory + File.separator 
                                      + zipEntry.getName()); 
  
                    f.createNewFile(); 
  
                    InputStream in = zipFile.getInputStream(zipEntry); 
  
                    FileOutputStream out = new FileOutputStream(f); 
  
                    byte[] by = new byte[1024]; 
  
                    int c; 
  
                    while ((c = in.read(by)) != -1) { 
  
                        out.write(by, 0, c); 
  
                    } 
  
                    in.close(); 
  
                    out.close(); 
  
                } 
  
            } 
  
        } catch (Exception ex) { 
  
            System.out.println(ex.getMessage()); 
  
        } finally { 
  
            zipFile.close(); 
  
            log.debug("解压完成!"); 
  
        } 
  
    } 
    /** 
     * 功能描述:列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤 
     * 
     * @param path 
     *            文件 
     */ 
    public static void list(File path) { 
        if (!path.exists()) { 
            System.out.println("文件名称不存?"); 
        } else { 
            if (path.isFile()) { 
                if (path.getName().toLowerCase().endsWith(".pdf") 
                        || path.getName().toLowerCase().endsWith(".doc") 
                        || path.getName().toLowerCase().endsWith(".chm") 
                        || path.getName().toLowerCase().endsWith(".html") 
                        || path.getName().toLowerCase().endsWith(".htm")) {// 文件格式 
                    System.out.println(path); 
                    System.out.println(path.getName()); 
                } 
            } else { 
                File[] files = path.listFiles(); 
                for (int i = 0; i < files.length; i++) { 
                    list(files[i]); 
                } 
            } 
        } 
    } 
    /** 
     * 
     * @param directory 
     * @param subDirectory 
     */ 
    private static void createDirectory(String directory, String subDirectory) { 
  
        String dir[]; 
  
        File fl = new File(directory); 
  
        try { 
  
            if (subDirectory == "" && fl.exists() != true) { 
  
                fl.mkdir(); 
  
            } else if (subDirectory != "") { 
  
                dir = subDirectory.replace('//', '/').split("/"); 
  
                for (int i = 0; i < dir.length; i++) { 
  
                    File subFile = new File(directory + File.separator + dir[i]); 
  
                    if (subFile.exists() == false) 
  
                        subFile.mkdir(); 
  
                    directory += File.separator + dir[i]; 
  
                } 
  
            } 
  
        } catch (Exception ex) { 
  
            System.out.println(ex.getMessage()); 
  
        } 
  
    } 
  
    /** 
     * 
     * 拷贝文件夹中的所有文件到另外一个文件夹 
     * 
     * @param srcDirector 
     *            源文件夹 
     * 
     * @param desDirector 
     *            目标文件夹 
     * 
     */ 
  
    public static void copyFileWithDirector(String srcDirector, 
                                            String desDirector) throws IOException { 
  
        (new File(desDirector)).mkdirs(); 
  
        File[] file = (new File(srcDirector)).listFiles(); 
  
        for (int i = 0; i < file.length; i++) { 
  
            if (file[i].isFile()) { 
  
                log.debug("拷贝:" + file[i].getAbsolutePath() + "-->" 
                          + desDirector + "/" + file[i].getName()); 
  
                FileInputStream input = new FileInputStream(file[i]); 
  
                FileOutputStream output = new FileOutputStream(desDirector 
                        + "/" + file[i].getName()); 
  
                byte[] b = new byte[1024 * 5]; 
  
                int len; 
  
                while ((len = input.read(b)) != -1) { 
  
                    output.write(b, 0, len); 
  
                } 
  
                output.flush(); 
  
                output.close(); 
  
                input.close(); 
  
            } 
  
            if (file[i].isDirectory()) { 
  
                log.debug("拷贝:" + file[i].getAbsolutePath() + "-->" 
                          + desDirector + "/" + file[i].getName()); 
  
                copyFileWithDirector(srcDirector + "/" + file[i].getName(), 
                                     desDirector + "/" + file[i].getName()); 
  
            } 
  
        } 
  
    } 
  
    /** 
     * 
     * 删除文件夹 
     * 
     * @param folderPath 
     *            folderPath 文件夹完整绝对路径 
     * 
     */ 
  
    public static void delFolder(String folderPath) throws Exception { 
  
        // 删除完里面所有内容 
  
        delAllFile(folderPath); 
  
        String filePath = folderPath; 
  
        filePath = filePath.toString(); 
  
        File myFilePath = new File(filePath); 
  
        // 删除空文件夹 
  
        myFilePath.delete(); 
  
    } 
  
    /** 
     * 
     * 删除指定文件夹下所有文件 
     * 
     * @param path 
     *            文件夹完整绝对路径 
     * 
     */ 
  
    public static boolean delAllFile(String path) throws Exception { 
  
        boolean flag = false; 
  
        File file = new File(path); 
  
        if (!file.exists()) { 
  
            return flag; 
  
        } 
  
        if (!file.isDirectory()) { 
  
            return flag; 
  
        } 
  
        String[] tempList = file.list(); 
  
        File temp = null; 
  
        for (int i = 0; i < tempList.length; i++) { 
  
            if (path.endsWith(File.separator)) { 
  
                temp = new File(path + tempList[i]); 
  
            } else { 
  
                temp = new File(path + File.separator + tempList[i]); 
  
            } 
  
            if (temp.isFile()) { 
  
                temp.delete(); 
  
            } 
  
            if (temp.isDirectory()) { 
  
                // 先删除文件夹里面的文件 
  
                delAllFile(path + "/" + tempList[i]); 
  
                // 再删除空文件夹 
  
                delFolder(path + "/" + tempList[i]); 
  
                flag = true; 
  
            } 
  
        } 
  
        return flag; 
  
    } 
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        File file = new File("H://"); 
        list(file); 
    } 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10891.html

(0)
上一篇 2021年7月19日 10:31
下一篇 2021年7月19日 10:31

相关推荐

发表回复

登录后才能评论