FileUtil.java

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

FileUtil.java的相关文章

【hadoop】——修改hadoop FileUtil.java,解决权限检查的问题

在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下: 15/01/30 10:08:17 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 15/01/30 10:08:17 ERROR security.UserGroupInformation:

修改hadoop FileUtil.java,解决权限检查的问题

    在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下: 15/01/30 10:08:17 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 15/01/30 10:08:17 ERROR security.UserGroupInformati

(转)FileUtil.java 工具类

package com.spring.sky.dialog.download; import java.io.File; import java.io.IOException; import java.sql.Timestamp; import java.text.DecimalFormat; import android.content.Context; import android.os.Environment; import android.util.Log; /** * 文件工具类 *

WebUploader插件上传大文件单文件和多文件JAVA版使用总结

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构Spring+struts2+mybatis+mysql 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

无向图的最短路径算法JAVA实现(转)

一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图.文件内容的格式参考这篇文章第一部分. 二,算法实现思路 无向图的最短路径实现相对于带权的有向图最短路径实现要简单得多. 源点的最短路径距离为0,从源点开始,采用广度优先的顺序,首先将与源点邻接的顶点的路径求出,然后再依次求解图中其他顶点的最短路径. 由于顶点的最短路径的求解顺序 是一个 广度优先的顺

java上传图片到数据库,涉及压缩文件zip/rar上传等

项目中有这个需求: 1)上传文件通过公司平台的校验,校验成功后,通过接口,返回文件流: 2)我们根据这个文件流进行操作.这里,先将文件流复制文件到项目临时目录WEB-INF/temp;文件使用完毕,删除之: 项目中用到了下面几点: 解压zip.rar文件: 临时文件存放,使用完毕删除之: 对压缩包中的图片进行裁剪,生成预览图,并保存: 根据产品族.产品类型.产品系列展示图片: 项目代码比较多,慢慢贴出来,不足之处欢迎指正. 1.项目结构: 2.相关代码: ProductController: p

5 weekend01、02、03、04、05、06、07的分布式集群的HA测试 + hdfs--动态增加节点和副本数量管理 + HA的java api访问要点

weekend01.02.03.04.05.06.07的分布式集群的HA测试 1)  weekend01.02的hdfs的HA测试 2)  weekend03.04的yarn的HA测试 1)  weekend01.02的hdfs的HA测试 首先,分布式集群都是正常的,且工作的 然后呢, 以上是,weekend01(active).weekend02(standby) 当weekend01给kill, 变成weekend01(standby).weekend02(active) 模拟weekend

用java下载hdfs文件报NullPointerException

用fs.copyToLocalFile( hdfsPath,localPath);下载hdfs的文件会报NullPointerException,具体报错为: java.lang.NullPointerException at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012) at org.apache.hadoop.util.Shell.runCommand(Shell.java:487) at org.apache.hadoop

JAVA安全模型

作为一种诞生于互联网兴起时代的语言,Java 从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的 Java 程序是安全的,如何对 Java 程序访问本地资源权限进行有限授权,这些安全角度的考虑一开始就影响到 Java 语言的设计与实现.可以说 Java 在这些方面的探索与经验,对后来的一些语言与产品都带来了积极影响. 本篇文章中将介绍 Java 中安全模型,以及如何利用安全访问控制机制来实现一些特定目的. Java 中的安全模型 在 Java 中将执行程序分成本地和远程两种,本地代码默认