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);
}
}
FileUtil.java的更多相关文章
- 【hadoop】——修改hadoop FileUtil.java,解决权限检查的问题
在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下: 15/01/30 10:08:17 WARN util.NativeCodeLoader: Unable ...
- 修改hadoop FileUtil.java,解决权限检查的问题
在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下: 15/01/30 10:08:17 WARN util.NativeCodeLoader: Una ...
- JAVA安全模型
作为一种诞生于互联网兴起时代的语言,Java 从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的 Java 程序是安全的,如何对 Java 程序访问本地资源权限进行有限授权,这些安全角度的考虑 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 用java下载hdfs文件报NullPointerException
用fs.copyToLocalFile( hdfsPath,localPath);下载hdfs的文件会报NullPointerException,具体报错为: java.lang.NullPointe ...
- 无向图的最短路径算法JAVA实现
一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...
- 有向图的拓扑排序算法JAVA实现
一,问题描述 给定一个有向图G=(V,E),将之进行拓扑排序,如果图有环,则提示异常. 要想实现图的算法,如拓扑排序.最短路径……并运行看输出结果,首先就得构造一个图.由于构造图的方式有很多种,这里假 ...
- 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 ...
- java中文件操作的工具类
代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...
随机推荐
- 推荐:室内定位API - indoor Location API
indoor.rs 公司近日开放了API,包括免费free的,收费fee的版本. 详情见这里,价格不是很贵哦 Open API支持Android/iOS等移动平台 提供工具,帮助进行地图和WiFi信号 ...
- 读《MacTalk·人生元编程》及Mac经常使用软件
引子 池建强的Blog:http://www.cnblogs.com/chijianqiang/ 用了1年多的黑苹果,是用Windows的思维用UI.用Linux的思维用Shell,折腾的是联想E49 ...
- Java为什么使用连接池
一.简介 动态Web站点往往用数据库存储的信息生成Web页面,每一个页面请求导致一次数据库访问.连接数据库不仅要开销一定的通信和内存资源,还必须完成用户验证.安全上下文配置这类任务,因为往往成为最为耗 ...
- javascript 知识点坑
1. JavaScript事件属性 event.target 当目标事件发生span里面 当目标事件发生在main里面 e.target; // 目标节点DOM结构 e.target.id; // ...
- Myself
每次过来写博客,一定是遇到什么问题,并且自己还解决不来. 并不是单纯的安静下来书写心得体会-->讨厌之余都有点看不起自己. 闲话少说,回归正题. C语言之于我可是骄傲与挫败并存. 当我做程式遇到 ...
- log4net根据日志类型写入到不同的文件中
<?xml version="1.0"?> <configuration> <configSections> <!--log4net配置安 ...
- css margin重叠
父子元素margin(垂直方向)重叠 解决办法: 给子元素添加浮动属性,相应父元素添加必要的清浮动属性: 给父元素添加边缘属性,如padding.border: 同级元素margin(垂直方向)反向重 ...
- JavaScript对象属性 constructor
对象属性 constructor 属性返回对创建此对象的数组函数的引用; constructor(构造函数) 在对象创建或实例化时候被调用的方法.通常使用该方法来初始化数据成员和所需资源.构造函数不 ...
- iOS_SN_CoreData数据迁移
最开始使用CoreData的时候碰到一个问题,就是当增加一个字段的时候再次运行APP会发生崩溃,一开始不知道什么原因,只知道是里面的表结构发生改变,就重新删掉APP再次安装是可以运行的,这样调试完后觉 ...
- iOS_SN_CoreDate(一)封装使用
看过一篇封装CoreData的文章挺不错,有基本使用封装,但是没有写怎么与tableView结合使用,我自己用的过程有些小波折,自己做了一个demo,大家可以看源码一些基本使用应该不难了, 原文:ht ...