用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

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

2013-05-16 作者: 神马举报

[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);
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...