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.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.filefilter.SuffixFileFilter; /** * 文件工具类 * * 需要Apache commons-io.jar和commons-fileupload.jar的支持 */ public class FileUtil { /** * 私有构造为了不让直接创建一个FileUtil实例 */ private FileUtil() { } /** * 查询某个目录下指定扩展名的文件 * * @param dir * 目录 * @param suffixs * 扩展名数组 * @return */ public static String[] find(String dir, String[] suffixs) { File d = new File(dir); return d.list(new SuffixFileFilter(suffixs)); } /** * 返回文件或目录的size * * @param file * 文件或目录 * @return size 以byte为单位 */ public static long size(String file) { File f = new File(file); if (f.isDirectory()) { return FileUtils.sizeOfDirectory(f); } return f.length(); } /** * 拷贝文件到文件或者目录 * * @param src * 源文件 * @param dest * 目的文件或目录 */ public static void copy(String src, String dest) { try { File s = new File(src); File d = new File(dest); int index = dest.indexOf("."); if (index == -1) { FileUtils.copyFileToDirectory(s, d); } else { FileUtils.copyFile(s, d); } } catch (IOException e) { e.printStackTrace(); } } /** * 移动文件到文件或者目录 * * @param src * 源文件 * @param dest * 目的文件或目录 */ public static void move(String src, String dest) { copy(src, dest); File f = new File(src); f.delete(); } /** * 删除文件或目录 * * @param path * 文件或目录的路径 */ public static void delete(String path) { try { File f = new File(path); if (f.exists() && f.isFile()) { f.delete(); } if (f.exists() && f.isDirectory()) { FileUtils.deleteDirectory(f); } } catch (IOException e) { e.printStackTrace(); } } /** * 清空目录 * * @param path * 目录的路径 */ public static void clean(String dir) { try { File f = new File(dir); FileUtils.cleanDirectory(f); } catch (IOException e) { e.printStackTrace(); } } /** * 写字符串内容到文件 * * @param content * 字符串内容 * @param dest * 目的文件 */ public static void write(String content, String dest) { try { File d = new File(dest); FileUtils.writeStringToFile(d, content, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } } /** * 读取文件的内容 * * @param file文件 * @return 字符串内容 */ public static String read(String file) { InputStream in = null; String content = null; try { in = new FileInputStream(file); content = IOUtils.toString(in, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(in); } return content; } /** * 压缩文件夹 * * @param folder * 文件夹 * @param target * 目标压缩文件 */ public static void zip(String folder, String target) { ZipOutputStream out = null; try { out = new ZipOutputStream(new FileOutputStream(target)); File fileOrDirectory = new File(folder); if (fileOrDirectory.isFile()) { zipFileOrDirectory(out, fileOrDirectory, ""); } else { File[] entries = fileOrDirectory.listFiles(); for (int i = 0; i < entries.length; i++) { zipFileOrDirectory(out, entries[i], ""); } } } catch (IOException ex) { ex.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException ex) { } } } } /** * 递归压缩文件或目录 * * @param out * 压缩输出流对象 * @param fileOrDirectory * 要压缩的文件或目录对象 * @param curPath * 当前压缩条目的路径,用于指定条目名称的前缀 */ private static void zipFileOrDirectory(ZipOutputStream out, File fileOrDirectory, String curPath) { FileInputStream in = null; try { if (!fileOrDirectory.isDirectory()) { byte[] buffer = new byte[4096]; int bytes_read; in = new FileInputStream(fileOrDirectory); ZipEntry entry = new ZipEntry(curPath + fileOrDirectory.getName()); out.putNextEntry(entry); while ((bytes_read = in.read(buffer)) != -1) { out.write(buffer, 0, bytes_read); } out.closeEntry(); } else { File[] entries = fileOrDirectory.listFiles(); for (int i = 0; i < entries.length; i++) { zipFileOrDirectory(out, entries[i], curPath + fileOrDirectory.getName() + File.separator); } } } catch (IOException ex) { ex.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException ex) { } } } } /** * 解压缩文件夹 * * @param zip * 压缩文件 * @param folder * 目标压缩文件 */ public static void unzip(String zip, String folder) { try { File z = new File(zip); File f = new File(folder); ZipInputStream zis = new ZipInputStream(new FileInputStream(z)); FileOutputStream fos = null; ZipEntry entry = null; int b; while ((entry = zis.getNextEntry()) != null) { File file = new File(f, entry.getName()); if (entry.isDirectory()) { file.mkdirs(); } else { fos = new FileOutputStream(file); while ((b = zis.read()) != -1) { fos.write(b); } fos.close(); } } zis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") public static void upload(HttpServletRequest request, String dir) { long MAXSIZE = 1024 * 1024; DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(MAXSIZE); try { List list = upload.parseRequest(request); if (list.size() > 0) { File d = new File(dir); if (!d.exists()) { d.mkdirs(); } for (int i = 0; i < list.size(); i++) { FileItem fileItem = (FileItem) list.get(i); if (fileItem.getSize() > 0) { String fileName = fileItem.getName(); int index = fileName.lastIndexOf(File.separatorChar); String name = fileName.substring(index + 1); fileItem .write(new File(dir + File.separatorChar + name)); } } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { // System.out.println(read("d:/aaa/adduser.xml")); // write("aaa", "d:/aaa/adduser.txt"); // delete("d:/aaa/cccc"); // copy("d:/aaa/adduser.xml", "d:/eee/aaa.xml"); // move("d:/aaa/adduser.txt", "d:/aaa/adduser1.txt"); // System.out.println(size("d:/aaa")); // String[] kk = find("d:/aaa", new String[] { "txt", "sql" }); // for (String string : kk) { // System.out.println(string); // } // zip("d:/aaaa", "d:/aaakkk.zip"); // unzip("d:/aaakkk.zip", "d:/ccc"); } }