package com.coolservlets.beans.method;
import java.io.*;
import java.util.List;
public class FileManager {
    //删除文件夹下所有内容，包括此文件夹
    public void delAll(File f) throws IOException {
        if(!f.exists())//文件夹不存在不存在
            throw new IOException("指定目录不存在:"+f.getName());
        boolean rslt=true;//保存中间结果
        if(!(rslt=f.delete())){//先尝试直接删除
            //若文件夹非空。枚举、递归删除里面内容
            File subs[] = f.listFiles();
            for (int i = 0; i <= subs.length - 1; i++) {
                if (subs[i].isDirectory())
                    delAll(subs[i]);//递归删除子文件夹内容
                rslt = subs[i].delete();//删除子文件夹本身
            }
            rslt = f.delete();//删除此文件夹本身
        }
        if(!rslt)
            throw new IOException("无法删除:"+f.getName());
        return;
    }

    //回写文件夹下所有内容，包括此文件夹
    public void fileAll(File f) throws IOException {
        //if(!f.exists())//文件夹不存在不存在
        //	throw new IOException("指定目录不存在:"+f.getName());
        boolean rslt=true;//保存中间结果
        if(!(rslt=f.delete())){//先尝试直接回写
            //若文件夹非空。枚举、递归回写里面内容
            File subs[] = f.listFiles();
            for (int i = 0; i <= subs.length - 1; i++) {
                if (subs[i].isDirectory())
                    delAll(subs[i]);//递归回写子文件夹内容
                rslt = subs[i].delete();//回写子文件夹本身
            }
            rslt = f.delete();//回写此文件夹本身
        }
        if(!rslt)
            throw new IOException("无法回写:"+f.getName());
        return;
    }
    /**
     * 递归修改目录下文件的后缀名
     *
     * @param oldSuffix
     *            原文件后缀
     * @param newSuffix
     *            修改后的文件后缀
     * @param dir
     *            要修改的文件所在的目录
     * @param isDeleteOldFile
     *            是否删除原文件 true删除 false不删除
     * @author tower
     */
    public static void modFileSuffix(String oldSuffix, String newSuffix, String dir,
                                     boolean isDeleteOldFile) {
        List filepathlist = ReadDirFiles2.readDirFiles(dir);

        for (int i = 0; i < filepathlist.size(); i++) {
            String outFilePathName = filepathlist.get(i).toString();// 原文件路径名
            String fileSuffix[] = outFilePathName.split("\\.");// 多个以点相隔的字符串数组

            String lastSuffix = outFilePathName.split("\\.")[fileSuffix.length - 1];// 文件后缀
            if (oldSuffix.equals(lastSuffix)) {
                String newFilePathName = outFilePathName.substring(0, outFilePathName
                        .indexOf(lastSuffix) - 1)
                        + "." + newSuffix;// 改为新文件名
                copyFile(outFilePathName, newFilePathName);
                if (isDeleteOldFile == true) {
                    File file = new File(outFilePathName);
                    file.delete();
                }
            }

        }

    }

    /**
     * 递归删除目录下文件的后缀名
     *
     * @param oldSuffix
     *            所要删除的文件后缀名
     * @param dir
     *            文件所在的目录
     * @param isDeleteOldFile
     *            是否删除原文件
     * @author tower
     */
    public static void deleteFileSuffix(String oldSuffix, String dir, boolean isDeleteOldFile) {
        List filepathlist = ReadDirFiles2.readDirFiles(dir);
        for (int i = 0; i < filepathlist.size(); i++) {
            String outFilePathName = filepathlist.get(i).toString();// 原文件路径名
            String fileSuffix[] = outFilePathName.split("\\.");// 多个以点相隔的字符串数组

            String lastSuffix = outFilePathName.split("\\.")[fileSuffix.length - 1];// 文件后缀
            if (oldSuffix.equals(lastSuffix)) {
                String newFilePathName = outFilePathName.substring(0, outFilePathName
                        .indexOf(lastSuffix));// 改为新文件名
                copyFile(outFilePathName, newFilePathName);
                if (isDeleteOldFile == true) {
                    File file = new File(outFilePathName);
                    file.delete();
                }
            }
        }
    }
    /**
     * 拷贝文件
     *
     * @param oldfilepath
     * @param newfilepath
     * @author tower
     */
    public static void copyFile(String oldfilepath, String newfilepath) {
        try {
            FileInputStream fis = new FileInputStream(new File(oldfilepath));
            FileOutputStream fos = new FileOutputStream(new File(newfilepath));
            byte[] buf = new byte[1024];
            while (fis.read(buf) != -1) {
                fos.write(buf);

            }
            fis.close();
            fos.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {
        FileManager da= new FileManager();
        try {
            da.delAll(new File("c:\\someDir"));
            // modFileSuffix("txt", "bat", "F:\\a\\xxx", false);
            deleteFileSuffix("txt","F:\\a\\xxx",false);
            // deleteFileSuffix("txt", "E:\\important\\30个工具类",true);
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
