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);
}
}

FileUtil.java的更多相关文章

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

    在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下: 15/01/30 10:08:17 WARN util.NativeCodeLoader: Unable ...

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

        在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下: 15/01/30 10:08:17 WARN util.NativeCodeLoader: Una ...

  3. JAVA安全模型

    作为一种诞生于互联网兴起时代的语言,Java 从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的 Java 程序是安全的,如何对 Java 程序访问本地资源权限进行有限授权,这些安全角度的考虑 ...

  4. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  5. 用java下载hdfs文件报NullPointerException

    用fs.copyToLocalFile( hdfsPath,localPath);下载hdfs的文件会报NullPointerException,具体报错为: java.lang.NullPointe ...

  6. 无向图的最短路径算法JAVA实现

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  7. 有向图的拓扑排序算法JAVA实现

    一,问题描述 给定一个有向图G=(V,E),将之进行拓扑排序,如果图有环,则提示异常. 要想实现图的算法,如拓扑排序.最短路径……并运行看输出结果,首先就得构造一个图.由于构造图的方式有很多种,这里假 ...

  8. 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)  wee ...

  9. java中文件操作的工具类

    代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...

随机推荐

  1. Android 之 资源文件的介绍及使用

    Android 之 资源文件的介绍及使用 1.资源的简单介绍:  在res文件夹中定义:字符串.颜色.数组.菜单.图片.视频等:在应用程序中使用这些资源.  2.使用资源的长处:降低代码量,同一时候为 ...

  2. javascript中的原型理解总结

    经过几天研究查找资料,对原型终于有点理解了,今天就做下总结,不对之处,希望各位能够提出. 1.每一个Javascript对象(null除外)都和另一个对象相关联,“另一个”对象就是我们今天所要总结的原 ...

  3. uva 10626 - Buying Coke(记忆化搜索)

    题目链接:10626 - Buying Coke 题目大意:给出要买可乐的数量, 以及1元,5元和10元硬币的数量, 每瓶可乐8元,每次照钱会按照最少硬币的方式找回, 问如何投币可使得投入的硬币数最少 ...

  4. 在VM中安装Android4.4连接小米手环 之 在VM中安装Android4.4

    今天刚买了个小米手环,系统须要4.4及以上,但自己手机系统版本号不匹配.故打算在VM中安装Android4.4连接小米手环. 这一节先介绍在VM中安装Android4.4(怎么安装VM就不介绍了) 1 ...

  5. java开发webservice的几种方式

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...

  6. SAN和NAS的区别

    SAN : STORAGE AREA NETWORK   存储区域网络 NAS : NETWORK ATTACHED STORAGE 网络附加存储 NAS不一定是盘阵,一台普通的主机就可以做出NAS, ...

  7. 【iOS开发之静态库、动态库】

    什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库.github中共享一般是开源库:闭源库分为:静态库和动态库,闭源库不开放源代码,是经过编译的二进制文件,一 ...

  8. C#、.NET和ASP.NET三者之间的区别

    刚毕业后出去找工作面试的时候就遇到这个问题!.回答不上来.回来网上查的如下: 那么 .NET.C#和ASP.NET这三者之间区别不清楚,到底它们之间有什么联系呢? 1..NET是一个平台,一个抽象的平 ...

  9. EF中的自动追踪与代理

    自动追踪 EF框架会自动追踪实体的变化(通过比较实体的当前值与原始值). 默认情况下,以下方法会自动触发实体变化的追踪 DbSet.Find DbSet.Local DbSet.Remove DbSe ...

  10. vb.net转换为C#方法

    第一个方法是上面有人说过的,用VB.NET TO C#的在线转换工具.既然你说不好用,那么可以这样:你把VB.NET代码编译了,然后用工具反编译(IL spy,reflector等)成C#代码.