package com.founder.util.file; 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.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * * <B>描述:</B>文件操作工具类<br/> * <B>版本:</B>v2.0<br/> * <B>创建时间:</B>2012-10-10<br/> * <B>版权:</B>flying团队<br/> * * @author zdf * */ public class FileUtil { /** * 通过文件读取XML配置文件 * * @param xmlFile * @return document 返回一个Document对象 */ public static Document readXml(File xmlFile) { Document tableNameDocument = null; SAXReader tableNameReader = new SAXReader(); try { tableNameDocument = tableNameReader.read(xmlFile); } catch (DocumentException e) { e.printStackTrace(); } return tableNameDocument; } /** * 通过流读取XML配置文件 * * @param xmlStream * @return document 返回一个Document对象 */ public static Document readXml(InputStream xmlStream) { Document tableNameDocument = null; SAXReader tableNameReader = new SAXReader(); try { tableNameDocument = tableNameReader.read(xmlStream); } catch (DocumentException e) { // log.error("解析xml输入流出错!",e); } return tableNameDocument; } /** * 将一个xml文件编程document,并保证在file文件 * * @param document * @param file * 保持xml的文件 */ public static void writeXml(Document document, File file) { XMLWriter xmlWriter = null; OutputFormat format = new OutputFormat(); // 设置缩进 format.setIndent(true); // 保持为UTF-8 format.setEncoding("UTF-8"); // 加入换行符 // format.setNewlines(true); // 写入文件 try { xmlWriter = new XMLWriter(new FileOutputStream(file), format); xmlWriter.write(document); xmlWriter.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 文件转变成字符串,编程字符串格式 * * @param file * 文件 * @return 字符串 */ public static String fileToString(File file) { try { BufferedReader reader = null; String template = ""; StringBuffer templateBuffer = new StringBuffer(); String tempStr = null; // 读取文件,按照UTF-8的方式 reader = new BufferedReader(new InputStreamReader( new FileInputStream(file), "UTF-8")); // 一次读入一行,直到读入null为文件结束 while ((tempStr = reader.readLine()) != null) { templateBuffer.append(tempStr + "\r\n"); } // 将StringBuffer变成String进行字符操作 template = templateBuffer.toString(); reader.close(); return template; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 将字符串保存到文件中 * * @param str * 字符串 * @param file * 保存的文件 */ public static void stringToFile(String str, File file) { OutputStreamWriter writer = null; try { writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); writer.write(str); writer.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 将输入流转换成字符串输出 * * @param is * @return 返回字符串 */ public static String streamToString(InputStream is){ if( is != null){ StringBuilder sb = new StringBuilder(); String line = ""; try { BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8")); while((line = reader.readLine()) != null){ sb.append(line).append("\n"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); }else{ return ""; } } /** * 创建文件操作 * * @param filePath 文件路径 * @throws FlyingException */ public static File createFile(String filePath) { File file = new File(filePath); if(!file.exists()){ if(filePath.endsWith(File.separator)){ // throw new FlyingException("目标文件不能为目录!"); } if(!file.getParentFile().exists()){ if(!file.getParentFile().mkdirs()){ // throw new FlyingException("创建目标文件所在的目录失败!"); } } } return file; } /** * 删除文件操作 * * @param file */ public static void deleteFile(File file) { if (file.exists()) { // 判断文件是否存在 if (file.isFile()) { // 判断是否是文件 file.delete(); // delete()方法 你应该知道 是删除的意思; } else if (file.isDirectory()) { // 否则如果它是一个目录 File files[] = file.listFiles(); // 声明目录下所有的文件 files[]; for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件 FileUtil.deleteFile(files[i]); // 把每个文件 用这个方法进行迭代 } } file.delete(); } } /** * 在本文件夹下查找 * * @param s * String 文件名 * @return File[] 找到的文件 */ public static File[] getFiles(String s) { return getFiles("./", s); } /** * 获取文件 可以根据正则表达式查找 * * @param dir * String 文件夹名称 * @param s * String 查找文件名,可带*.?进行模糊查询 * @return File[] 找到的文件 */ public static File[] getFiles(String dir, String s) { // 开始的文件夹 File file = new File(dir); s = s.replace(‘.‘, ‘#‘); s = s.replaceAll("#", "\\\\."); s = s.replace(‘*‘, ‘#‘); s = s.replaceAll("#", ".*"); s = s.replace(‘?‘, ‘#‘); s = s.replaceAll("#", ".?"); s = "^" + s + "$"; Pattern p = Pattern.compile(s); ArrayList list = filePattern(file, p); File[] rtn = new File[list.size()]; list.toArray(rtn); return rtn; } /** * @param file * File 起始文件夹 * @param p * Pattern 匹配类型 * @return ArrayList 其文件夹下的文件夹 */ private static ArrayList filePattern(File file, Pattern p) { if (file == null) { return null; } else if (file.isFile()) { Matcher fMatcher = p.matcher(file.getName()); if (fMatcher.matches()) { ArrayList list = new ArrayList(); list.add(file); return list; } } else if (file.isDirectory()) { File[] files = file.listFiles(); if (files != null && files.length > 0) { ArrayList list = new ArrayList(); for (int i = 0; i < files.length; i++) { ArrayList rlist = filePattern(files[i], p); if (rlist != null) { list.addAll(rlist); } } return list; } } return null; } /** * 重命名文件 * @author zjx 2012-10-23 * @param sourceFileName * @param destFileName * @return */ public static boolean renameFile(String sourceFileName,String destFileName){ File source_file = new File(sourceFileName); File dest_file = new File(destFileName); if(!source_file.exists()){ throw new RuntimeException("重命名文件: no such file"+sourceFileName); } source_file.renameTo(dest_file); return true; } /** * 获取文件夹或者文件的大小 * @param f * @return */ public static long getFileSize(File f){ long size = 0; if(!f.isDirectory()){ //如果是文件,直接返回文件大小 size = f.length(); }else{ File[] filelist = f.listFiles(); for(int i=0;i<filelist.length;i++){ if(filelist[i].isDirectory()){ size += getFileSize(filelist[i]); }else{ size += filelist[i].length(); } } } return size; } public static byte[] getBytesFromFile(File file) throws IOException { InputStream is = new FileInputStream(file); // 获取文件大小 long length = file.length(); if (length > Integer.MAX_VALUE) { // 文件太大,无法读取 throw new IOException("File is to large "+file.getName()); } // 创建一个数据来保存文件数据 byte[] bytes = new byte[(int)length]; // 读取数据到byte数组中 int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { offset += numRead; } // 确保所有数据均被读取 if (offset < bytes.length) { throw new IOException("Could not completely read file "+file.getName()); } // Close the input stream and return bytes is.close(); return bytes; } //合并两个字节数组 public static byte[] byteMerger(byte[] byte_1, byte[] byte_2){ byte[] byte_3 = new byte[byte_1.length+byte_2.length]; System.arraycopy(byte_1, 0, byte_3, 0, byte_1.length); System.arraycopy(byte_2, 0, byte_3, byte_1.length, byte_2.length); return byte_3; } public static void SaveFileFromInputStream(InputStream stream,String filename) throws IOException { int index = filename.lastIndexOf(File.separatorChar); String path = filename.substring(0,index + 1); File file=new File(path); if(!file .exists() || !file.isDirectory()){ file.mkdirs(); } File saveFile = new File(filename); if(!saveFile .exists()) saveFile.createNewFile(); FileOutputStream fs = new FileOutputStream(filename); byte[] buffer =new byte[1024*1024]; int bytesum = 0; int byteread = 0; while ((byteread=stream.read(buffer))!=-1) { bytesum+=byteread; fs.write(buffer,0,byteread); fs.flush(); } fs.close(); stream.close(); } public static void main(String[] args) { String fileName = "C:/Users/Administrator/Desktop/Temp/"; long size = FileUtil.getFileSize(new File(fileName)); System.out.println("success."+size); } }
时间: 2024-10-11 15:57:16