spring对文件递归复制、删除等系统操作工具类FileSystemUtils及FileCopyUtils

一、前言

这边基于spring-core提供的org.springframework.util.FileSystemUtils、org.springframework.util.FileCopyUtils等工具类对系统文件进行递归复制、递归删除等.

二、代码

1.FileSystemUtils文件系统工具类

package org.springframework.util;

 

import java.io.File;

import java.io.IOException;

 

/**

 * Utility methods for working with the file system.

 *

 * @author Rob Harrop

 * @author Juergen Hoeller

 * @since 2.5.3

 */

public abstract class FileSystemUtils {

 

    /**

     * Delete the supplied {@link File} - for directories,

     * recursively delete any nested directories or files as well.

     * @param root the root {@code File} to delete

     * @return {@code true} if the {@code File} was deleted,

     * otherwise {@code false}

     */

    public static boolean deleteRecursively(File root) {

        if (root != null && root.exists()) {

            if (root.isDirectory()) {

                File[] children = root.listFiles();

                if (children != null) {

                    for (File child : children) {

                        deleteRecursively(child);

                    }

                }

            }

            return root.delete();

        }

        return false;

    }

 

    /**

     * Recursively copy the contents of the {@code src} file/directory

     * to the {@code dest} file/directory.

     * @param src the source directory

     * @param dest the destination directory

     * @throws IOException in the case of I/O errors

     */

    public static void copyRecursively(File src, File dest) throws IOException {

        Assert.isTrue(src != null && (src.isDirectory() || src.isFile()), "Source File must denote a directory or file");

        Assert.notNull(dest, "Destination File must not be null");

        doCopyRecursively(src, dest);

    }

 

    /**

     * Actually copy the contents of the {@code src} file/directory

     * to the {@code dest} file/directory.

     * @param src the source directory

     * @param dest the destination directory

     * @throws IOException in the case of I/O errors

     */

    private static void doCopyRecursively(File src, File dest) throws IOException {

        if (src.isDirectory()) {

            dest.mkdir();

            File[] entries = src.listFiles();

            if (entries == null) {

                throw new IOException("Could not list files in directory: " + src);

            }

            for (File entry : entries) {

                doCopyRecursively(entry, new File(dest, entry.getName()));

            }

        }

        else if (src.isFile()) {

            try {

                dest.createNewFile();

            }

            catch (IOException ex) {

                IOException ioex = new IOException("Failed to create file: " + dest);

                ioex.initCause(ex);

                throw ioex;

            }

            FileCopyUtils.copy(src, dest);

        }

        else {

            // Special File handle: neither a file not a directory.

            // Simply skip it when contained in nested directory...

        }

    }

}

2.FileCopyUtils - 文件复制工具类

package org.springframework.util;

 

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.Reader;

import java.io.StringWriter;

import java.io.Writer;

 

/**

 * Simple utility methods for file and stream copying. All copy methods use a block size

 * of 4096 bytes, and close all affected streams when done. A variation of the copy

 * methods from this class that leave streams open can be found in {@link StreamUtils}.

 *

 * <p>Mainly for use within the framework, but also useful for application code.

 *

 * @author Juergen Hoeller

 * @since 06.10.2003

 * @see StreamUtils

 */

public abstract class FileCopyUtils {

 

    public static final int BUFFER_SIZE = StreamUtils.BUFFER_SIZE;

 

 

    //---------------------------------------------------------------------

    // Copy methods for java.io.File

    //---------------------------------------------------------------------

 

    /**

     * Copy the contents of the given input File to the given output File.

     * @param in the file to copy from

     * @param out the file to copy to

     * @return the number of bytes copied

     * @throws IOException in case of I/O errors

     */

    public static int copy(File in, File out) throws IOException {

        Assert.notNull(in, "No input File specified");

        Assert.notNull(out, "No output File specified");

        return copy(new BufferedInputStream(new FileInputStream(in)),

            new BufferedOutputStream(new FileOutputStream(out)));

    }

 

    /**

     * Copy the contents of the given byte array to the given output File.

     * @param in the byte array to copy from

     * @param out the file to copy to

     * @throws IOException in case of I/O errors

     */

    public static void copy(byte[] in, File out) throws IOException {

        Assert.notNull(in, "No input byte array specified");

        Assert.notNull(out, "No output File specified");

        ByteArrayInputStream inStream = new ByteArrayInputStream(in);

        OutputStream outStream = new BufferedOutputStream(new FileOutputStream(out));

        copy(inStream, outStream);

    }

 

    /**

     * Copy the contents of the given input File into a new byte array.

     * @param in the file to copy from

     * @return the new byte array that has been copied to

     * @throws IOException in case of I/O errors

     */

    public static byte[] copyToByteArray(File in) throws IOException {

        Assert.notNull(in, "No input File specified");

        return copyToByteArray(new BufferedInputStream(new FileInputStream(in)));

    }

 

 

    //---------------------------------------------------------------------

    // Copy methods for java.io.InputStream / java.io.OutputStream

    //---------------------------------------------------------------------

 

    /**

     * Copy the contents of the given InputStream to the given OutputStream.

     * Closes both streams when done.

     * @param in the stream to copy from

     * @param out the stream to copy to

     * @return the number of bytes copied

     * @throws IOException in case of I/O errors

     */

    public static int copy(InputStream in, OutputStream out) throws IOException {

        Assert.notNull(in, "No InputStream specified");

        Assert.notNull(out, "No OutputStream specified");

        try {

            return StreamUtils.copy(in, out);

        }

        finally {

            try {

                in.close();

            }

            catch (IOException ex) {

            }

            try {

                out.close();

            }

            catch (IOException ex) {

            }

        }

    }

 

    /**

     * Copy the contents of the given byte array to the given OutputStream.

     * Closes the stream when done.

     * @param in the byte array to copy from

     * @param out the OutputStream to copy to

     * @throws IOException in case of I/O errors

     */

    public static void copy(byte[] in, OutputStream out) throws IOException {

        Assert.notNull(in, "No input byte array specified");

        Assert.notNull(out, "No OutputStream specified");

        try {

            out.write(in);

        }

        finally {

            try {

                out.close();

            }

            catch (IOException ex) {

            }

        }

    }

 

    /**

     * Copy the contents of the given InputStream into a new byte array.

     * Closes the stream when done.

     * @param in the stream to copy from

     * @return the new byte array that has been copied to

     * @throws IOException in case of I/O errors

     */

    public static byte[] copyToByteArray(InputStream in) throws IOException {

        ByteArrayOutputStream out = new ByteArrayOutputStream(BUFFER_SIZE);

        copy(in, out);

        return out.toByteArray();

    }

 

 

    //---------------------------------------------------------------------

    // Copy methods for java.io.Reader / java.io.Writer

    //---------------------------------------------------------------------

 

    /**

     * Copy the contents of the given Reader to the given Writer.

     * Closes both when done.

     * @param in the Reader to copy from

     * @param out the Writer to copy to

     * @return the number of characters copied

     * @throws IOException in case of I/O errors

     */

    public static int copy(Reader in, Writer out) throws IOException {

        Assert.notNull(in, "No Reader specified");

        Assert.notNull(out, "No Writer specified");

        try {

            int byteCount = 0;

            char[] buffer = new char[BUFFER_SIZE];

            int bytesRead = -1;

            while ((bytesRead = in.read(buffer)) != -1) {

                out.write(buffer, 0, bytesRead);

                byteCount += bytesRead;

            }

            out.flush();

            return byteCount;

        }

        finally {

            try {

                in.close();

            }

            catch (IOException ex) {

            }

            try {

                out.close();

            }

            catch (IOException ex) {

            }

        }

    }

 

    /**

     * Copy the contents of the given String to the given output Writer.

     * Closes the writer when done.

     * @param in the String to copy from

     * @param out the Writer to copy to

     * @throws IOException in case of I/O errors

     */

    public static void copy(String in, Writer out) throws IOException {

        Assert.notNull(in, "No input String specified");

        Assert.notNull(out, "No Writer specified");

        try {

            out.write(in);

        }

        finally {

            try {

                out.close();

            }

            catch (IOException ex) {

            }

        }

    }

 

    /**

     * Copy the contents of the given Reader into a String.

     * Closes the reader when done.

     * @param in the reader to copy from

     * @return the String that has been copied to

     * @throws IOException in case of I/O errors

     */

    public static String copyToString(Reader in) throws IOException {

        StringWriter out = new StringWriter();

        copy(in, out);

        return out.toString();

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值