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. ...
随机推荐
- c++中基本的语法问题
的输出是? 答案:构造函数的初始化列表 字符串转化为整形的代码: enum Status{ kValid = 0,kInvalid }; int g_nStatus = kValid; int Str ...
- JDK版本错误:Unsupported major.minor version 51.0
错误原因 有时候把项目从本机编译文件部署到服务器,或者发给别人使用时,会报如下异常: java.lang.UnsupportedClassVersionError: test_hello_world ...
- 1034 - Navigation
Global Positioning System (GPS) is a navigation system based on a set of satellites orbiting approxi ...
- c++11 : Local and Unnamed Types as Template Arguments
In N2402, Anthony Williams proposes that local types, and unnamed types be usable as template argume ...
- javascriipt类型转换
- css margin重叠
父子元素margin(垂直方向)重叠 解决办法: 给子元素添加浮动属性,相应父元素添加必要的清浮动属性: 给父元素添加边缘属性,如padding.border: 同级元素margin(垂直方向)反向重 ...
- Android推送等耗电原因剖析
原文链接:http://www.jianshu.com/p/584707554ed7 Android手机有两个处理器,一个是Application Processor(AP)基于ARM处理器,主要运行 ...
- windows身份验证,那么sqlserver的连接字符串的
Data Source=计算机名称或ip地址;Initial Catalog=数据库名称;Integrated Security=True windows身份验证不需要psw的Provider=SQL ...
- a标签的onclick和href事件的区别
在执行顺序上href是低于onclick的,那么这个会造成什么影响呢 <div onclick="a()"> <a href="#" oncl ...
- [转]Windows Shell 编程 第九章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987969】
第九章 图标与Windows任务条 如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标.无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去 ...