首页 > 代码库 > FileUtil

FileUtil

package com.wiseweb.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileUtil {

	// /**
	// * 获取获取系统根目录下xml文件的路径的方法;
	// */
	// @SuppressWarnings("unused")
	// private String projectFilePath = new File("").getAbsolutePath()
	// + "\\config.xml";
	//
	// /**
	// * 获取Web项目发布后(源码中src下)classes目录下某个xml路径的方法;
	// */
	// @SuppressWarnings("unused")
	// private String srcFilePath = getClass().getClassLoader().getResource(
	// "config.xml").getPath();

	File file = null;
	boolean flag = false;

	/**
	 * 写入txt文件,可以在原文件内容的基础上追加内容(并判断目录是否存在,不存在则生成目录)
	 * 
	 * @param value
	 *            写入文件内容
	 * @param fileCatage
	 *            文件父目录;
	 * @param fileName
	 *            文件名字;
	 * @param code
	 *            文件的编码;
	 * @throws IOException
	 */
	public void WriteFile(String value, String fileCatage, String fileName,
			String code) {
		File file = null;
		try {
			file = new File(fileCatage);
			if (!file.isDirectory())
				file.mkdir();
			else {
				file = new File(fileCatage + fileName);
				if (!file.exists())
					file.createNewFile();
				FileOutputStream out = new FileOutputStream(file, true);
				out.write(value.getBytes(code));
				out.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/***
	 * 覆盖原来的内容;
	 * 
	 * @param filePath
	 *            文件的路径
	 * @param content
	 *            保存的内容;
	 * @return
	 */
	public boolean saveFile(String filePath, String content) {
		boolean successful = true;
		FileOutputStream fout = null;
		try {
			fout = new FileOutputStream(new File(filePath), false);
			fout.write(content.getBytes());
		} catch (FileNotFoundException e1) {
			successful = false;
		} catch (IOException e) {
			successful = false;
		} finally {
			if (fout != null) {
				try {
					fout.close();
				} catch (IOException e) {
				}
			}
		}
		return successful;
	}

	/**
	 * 删除文件的综合操作( 根据路径删除指定的目录或文件,无论存在与否)
	 * 
	 * @param sPath
	 *            要删除的目录或文件
	 *@return 删除成功返回 true,否则返回 false。
	 */
	public boolean DeleteFolder(String sPath) {
		flag = false;
		file = new File(sPath);
		// 判断目录或文件是否存在
		if (!file.exists()) { // 不存在返回 false
			return flag;
		} else {
			// 判断是否为文件
			if (file.isFile()) { // 为文件时调用删除文件方法
				return deleteFile(sPath);
			} else { // 为目录时调用删除目录方法
				return deleteDirectory(sPath);
			}
		}
	}

	/**
	 * 删除单个文件
	 * 
	 * @param sPath
	 *            被删除文件的文件名
	 * @return 单个文件删除成功返回true,否则返回false
	 */
	public boolean deleteFile(String sPath) {
		flag = false;
		file = new File(sPath);
		// 路径为文件且不为空则进行删除
		if (file.isFile() && file.exists()) {
			file.delete();
			flag = true;
		}
		return flag;
	}

	/**
	 * 删除目录(文件夹)以及目录下的文件
	 * 
	 * @param sPath
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true,否则返回false
	 */
	public boolean deleteDirectory(String sPath) {
		// 如果sPath不以文件分隔符结尾,自动添加文件分隔符
		if (!sPath.endsWith(File.separator)) {
			sPath = sPath + File.separator;
		}
		File dirFile = new File(sPath);
		// 如果dir对应的文件不存在,或者不是一个目录,则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag)
					break;
			} // 删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag)
					break;
			}
		}
		if (!flag)
			return false;
		// 删除当前目录
		if (dirFile.delete()) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 按字节【读】取文件的内容;
	 * 
	 * @param Offset
	 *            读取内容的开始出
	 * @param length
	 *            内容的长度;
	 * @param filePath
	 *            文件的路径;
	 * @param code
	 *            编码;
	 * @return 返回相应的内容;
	 * @throws Exception
	 */
	public String readFileByByte(int Offset, int length, String filePath,
			String code) {
		File file = new File(filePath);
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return null;
		}
		try {
			fis.skip(Offset);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		byte[] bytes = new byte[length];
		try {
			fis.read(bytes);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		try {
			fis.close();
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		try {
			return new String(bytes, code);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 将流中的文本读入一个 BufferedReader 中
	 * 
	 * @param filePath
	 *            文件路径
	 * @param code
	 *            编码格式
	 * @return
	 * @throws IOException
	 */

	public BufferedReader readToBufferedReader(String filePath, String code)
			throws IOException {
		BufferedReader bufferedReader = null;
		File file = new File(filePath);
		if (file.isFile() && file.exists()) { // 判断文件是否存在
			InputStreamReader read = new InputStreamReader(new FileInputStream(
					file), code);// 考虑到编码格式
			bufferedReader = new BufferedReader(read);
		}
		return bufferedReader;
	}

	/**
	 * 将流中的文本读入一个 StringBuffer 中
	 * 
	 * @param filePath
	 *            文件路径
	 * @throws IOException
	 */
	public StringBuffer readToBuffer(String filePath, String code) {
		StringBuffer buffer = new StringBuffer();
		InputStream is;
		try {
			File file = new File(filePath);
			if (!file.exists())
				return null;
			is = new FileInputStream(filePath);
			String line; // 用来保存每行读取的内容
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					new FileInputStream(file), code));
			line = reader.readLine(); // 读取第一行
			while (line != null) { // 如果 line 为空说明读完了
				buffer.append(line); // 将读到的内容添加到 buffer 中
				// buffer.append("\n"); // 添加换行符
				line = reader.readLine(); // 读取下一行
			}
			reader.close();
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return buffer;
	}

	public String loadFile(String filePath, String charset) {
		FileInputStream fin = null;
		StringBuffer sb = new StringBuffer();
		try {
			fin = new FileInputStream(new File(filePath));
			byte[] buffer = new byte[Integer.MAX_VALUE];
			int start = -1;
			while ((start = fin.read(buffer)) != -1) {
				sb.append(new String(buffer, 0, start, charset));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (fin != null) {
				try {
					fin.close();
				} catch (IOException e) {
				}
			}
		}
		return sb.toString();
	}

	/**
	 * 获取某个目录下所有文件或者获取某个文件的大小; 单位:MB
	 * 
	 * @param file
	 * @return
	 */
	public static double getDirSize(File file) {
		// 判断文件是否存在
		if (file.exists()) {
			// 如果是目录则递归计算其内容的总大小
			if (file.isDirectory()) {
				File[] children = file.listFiles();
				double size = 0;
				for (File f : children)
					size += getDirSize(f);
				return size;
			} else {// 如果是文件则直接返回其大小,以“兆”为单位
				double size = (double) file.length() / 1024 / 1024;
				return size;
			}
		} else {
			System.out.println("获取文件大小错误!!文件或者文件夹不存在,请检查路径是否正确!");
			return 0.0;
		}
	}

	/**
	 * 获取某个目录下所有的文件的全路径和文件名的集合;
	 * 
	 * @return
	 */
	public List<List<String>> getAllFile(String mulu) {
		File file = new File(mulu);
		File[] files = file.listFiles();
		List<List<String>> ret = new ArrayList<List<String>>();
		List<String> allFilePath = new ArrayList<String>();
		List<String> allFileName = new ArrayList<String>();
		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				allFilePath.add(files[i].toString());
				allFileName.add(files[i].getName());
			}
		}
		ret.add(allFilePath);
		ret.add(allFileName);
		return ret;
	}

}

FileUtil