java操作文件类 (文件解压缩 文件增删改查)

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
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);
    }
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:判断当月一号是周几的JS代码

下一篇:java countDownLatch 线程辅助类