package com.uas.report.util;

import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.lang.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.druid.util.StringUtils;
import com.uas.report.core.exception.ReportException;

/**
 * 文件操作工具类
 * 
 * @author sunyj
 * @since 2016年11月3日 上午9:24:04
 */
public class FileUtils {

	private static final Logger logger = LoggerFactory.getLogger(FileUtils.class);

	/**
	 * 写入文件
	 * 
	 * @param filePath
	 *            文件路径
	 * @param data
	 *            数据
	 */
	public static void write(String filePath, byte[] data) {
		if (StringUtils.isEmpty(filePath) || ArrayUtils.isEmpty(data)) {
			throw new ReportException("参数不能为空：filePath，data");
		}
		File file = new File(filePath);
		if (!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		try {
			FileOutputStream fos = new FileOutputStream(file);
			fos.write(data);
			fos.flush();
			logger.info("Writed... " + file.getPath());
			fos.close();
		} catch (IOException e) {
			throw new ReportException(e).setDetailedMessage(e);
		}
	}

	/**
	 * 递归删除文件（夹）
	 * 
	 * @param file
	 *            文件（夹）
	 */
	public static void deleteDir(File file) {
		deleteDir(file, null);
	}

	/**
	 * 递归删除文件（夹）
	 * 
	 * @param file
	 *            文件（夹）
	 * @param filter
	 *            文件过滤
	 */
	public static void deleteDir(File file, FileFilter filter) {
		if (file == null) {
			return;
		}
		if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				deleteDir(f, filter);
			}
		}
		// 如果文件不符合条件，则不删除
		if (filter != null && !filter.accept(file)) {
			return;
		}
		file.delete();
		logger.info("Deleted... " + file.getPath());
	}
}
