`

File Util

 
阅读更多
package com.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * XML操作帮助类   文件操作帮助类
 * @author xinjiatao
 *
 */
public class XmlUtil {

	/**
	 * 将Dom 读到另一个文件
	 * 
	 * @param dom
	 * @param ifile
	 * @return
	 */
	public static int writeXMLPretty(Document dom, String ifile) {
		int retVar = 1;
		try {
			OutputStream out;
			File file = new File(ifile);
			if (!file.exists()) {
				if (!(file.getParentFile().exists())
						&& !(file.getParentFile().mkdirs())) {
					return 1;
				}
			}

			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("UTF-8");
			out = new FileOutputStream(file);
			XMLWriter wr = new XMLWriter(out, format);
			wr.write(dom);
			wr.close();
			retVar = 0;
		} catch (FileNotFoundException fe) {
			fe.printStackTrace();
		} catch (UnsupportedEncodingException ue) {
			ue.printStackTrace();
		} catch (IOException ie) {
			ie.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return retVar;
	}

	/**
	 * 在一个XML中, 删除指定的节点
	 * 
	 * @param elmDevice
	 *            一个xml节点
	 * @param elmDel
	 *            要删除的一个节点
	 */
	public static void selectDelXmlNode(Element elmDevice, Element elmDel) {
		for (Iterator it = elmDevice.elementIterator(); it.hasNext();) {
			Element element = (Element) it.next();
			int attCount = element.attributeCount();
			int passCount = elmDel.attributeCount();

			if (attCount == passCount) {
				int count = 0;
				for (int k = 0; k < attCount; k++) {

					String devName = element.attribute(k).getName();
					String devVal = element.attribute(k).getValue();

					// 要删除的节点
					String passName = element.attribute(k).getName();
					String passVal = element.attribute(k).getValue();

					if (devName.equals(passName) && devVal.equals(passVal)
							&& attCount == passCount) {
						count++;
					}
				}
				if (count == passCount) {
					Element e = element.getParent();
					e.remove(element);
				}
			}
			selectDelXmlNode(element, elmDel);
		}
	}

	/**
	 * 读取XML返回Dom
	 * 
	 * @param reader
	 * @return
	 */
	public static Document readXml(Reader reader) {
		SAXReader sreader = new SAXReader();
		try {
			return sreader.read(reader);
		} catch (DocumentException de) {
			de.printStackTrace();
			return null;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} finally {
			try {
				reader.close();
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}

	/**
	 * 修改XML节点
	 * 
	 * @param elmDevice
	 *            要修改的XML
	 * @param elmOld
	 *            之前的XML 节点
	 * @param newElm
	 *            修改后的XML节点
	 */
	public static void selectModifyXmlNode(Element elmDevice, Element elmOld,
			Element newElm) {
		for (Iterator it = elmDevice.elementIterator(); it.hasNext();) {
			Element element = (Element) it.next();
			int attCount = element.attributeCount();
			int passCount = elmOld.attributeCount();
			int newCount = newElm.attributeCount();

			if (attCount == passCount && passCount == newCount) {
				int count = 0;
				for (int k = 0; k < attCount; k++) {
					String devName = element.attribute(k).getName();
					String devVal = element.attribute(k).getValue();

					String passName = elmOld.attribute(k).getName();
					String passVal = elmOld.attribute(k).getValue();

					if (devName.equals(passName) && devVal.equals(passVal)
							&& attCount == passCount) {
						count++;
					}
				}
				if (count == passCount) {
					for (int i = 0; i < element.attributeCount(); i++) {
						for (int j = 0; j < newElm.attributeCount(); j++) {
							if (element.attribute(i).getName()
									.equals(newElm.attribute(j).getName())) {
								element.attribute(i).setValue(
										newElm.attribute(j).getValue());
							}
						}
					}
				}
			}
			selectModifyXmlNode(element, elmOld, newElm);
		}
	}

	/**
	 * 新建文件并添加内容
	 * 
	 * @param filePathAndName
	 *            文件名称及地址 如:c:/test.txt
	 * @param fileContent
	 *            文件的内容
	 */
	public static void newFile(String filePathAndName, String fileContent) {
		try {
			String filePath = filePathAndName;
			filePath = filePath.toString();

			File myFilePath = new File(filePath);

			if (!myFilePath.exists()) {
				if (myFilePath.getParentFile().mkdirs()) {
					myFilePath.createNewFile();
				}
			} else {
				//如果存在就删除文件
				// FileOperate.delFile(filePath);
				myFilePath.delete();
			}

			FileWriter resultFile = new FileWriter(myFilePath);
			PrintWriter myFile = new PrintWriter(resultFile);
			String strCountent = fileContent;
			myFile.println(strCountent);
			resultFile.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 新建目录 
	 * @param folderPath  如c:/f.txt
	 */
	public static void newFolder(String folderPath){
		try {
			String filePath = folderPath;
			filePath = filePath.toString();
			
			File myFilePath = new File(filePath);
			if(!myFilePath.exists()){
				myFilePath.mkdir();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 删除文件
	 * @param filePathAndName 文件路径及名称 如:C:/f.txt
	 * @return
	 */
	public static boolean delFile(String filePathAndName){
		try {
			String filePath = filePathAndName;
			filePath = filePath.toString();
			File myDelFile = new File(filePath);
			return myDelFile.delete();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 删除文件夹
	 * @param folderPath 文件夹的完整路径 如 c:/a
	 * @return
	 */
	public static boolean delFolder(String folderPath){
		try {
			delAllFile(folderPath);//删除里面的文件
			String filePath = folderPath;
			filePath = filePath.toString();
			File myFilePath = new File(filePath);
			return myFilePath.delete();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 删除指定文件夹下的全部文件
	 * @param path
	 */
	public static void delAllFile(String path){
		File file = new File(path);
		
		if(!file.exists()){
			return ;
		}
		
		if(!file.isDirectory()){
			return ;
		}
		
		String[] tempList = file.list();
		File temp = null;
		
		for(int i=0; i<tempList.length;i++){
			if(path.endsWith(file.separator)){
				temp = new File(path + tempList[i]);
			}else{
				temp = new File(path + File.separator + tempList[i]);
			}
			
			if(temp.isFile()){
				temp.delete();
			}
			
			if(temp.isDirectory()){
				delAllFile(path + File.separator + tempList[i]);
				delFolder(path + File.separator + tempList[i]);
			}
		}
	}
	
	/**
	 * 在文件中查找字符 所在的行
	 * @param filePath  文件的路径
	 * @param charName  要查找的字符
	 * @return
	 */
	public static int searchCharacter(String filePath,String charName){
		BufferedReader inf;
		int count = -1;
		
		try {
			inf = new BufferedReader(new FileReader(filePath));
			String s = new String();
			int findit = -1;
			
			try {
				while((s = inf.readLine()) != null && findit < 0){
					findit = s.indexOf(charName);
					count ++;
				}
				inf.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		return count;
	}
	
	/**
	 * 在文件的指定位置插入字符
	 * @param filePath  文件的路径
	 * @param insertCharName  将要插入的字符
	 * @param lineNumber  行号
	 */
	public static void insertCharacter(String filePath,String insertCharName, int lineNumber){
		
		//临时文件
		File outFile;
		try {
			outFile = File.createTempFile("name", ".tmp");
			File inFile = new File(filePath);
			
			//输入
			FileInputStream fis = new FileInputStream(outFile);
			BufferedReader in = new BufferedReader(new InputStreamReader(fis));
			
			//输出
			FileOutputStream fos = new FileOutputStream(outFile);
			PrintWriter out = new PrintWriter(fos);
			
			//保存一行数据
			String thisLine;
			//行号从 1 开始
			int i= 1;
			while((thisLine = in.readLine())!= null){
				//如果行号等于目标行,则输出要插入的数据
				if(i == lineNumber){
					out.println(insertCharName);
				}
				//输出读取到的数据
				out.println(thisLine);
				//行号增加
				i++;
			}
			out.flush();
			out.close();
			in.close();
			
			//删除原始文件
			inFile.delete();
			//把临时文件改名为原文件名
			outFile.renameTo(inFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 拷贝文件
	 * @param oldPath 老的文件路径
	 * @param newPath 新的文件 路径
	 * @param override
	 */
	public static void copyFile(String oldPath,String newPath,boolean override){
		File oldfile = new File(oldPath);
		File df = new File(newPath);
		
		//如果文件存在,且不进行覆盖,则直接返回
		if(!override && df.exists()){
			return ;
		}
		
		//如果目标路径不存在 ,则创建
		File ppath = new File(df.getParent());
		if(!ppath.exists()){
			ppath.mkdirs();
		}
		
		if(oldfile.exists()){//文件存在时
			FileChannel inChannel = null;
			FileChannel outChannel = null;
			
			try {
				inChannel = new FileInputStream(oldfile).getChannel();
				outChannel = new FileOutputStream(df).getChannel();
				inChannel.transferTo(0, inChannel.size(), outChannel);
				
			} catch (IOException e) {
				e.printStackTrace();
			}finally{
				try {
					if(inChannel != null)
						inChannel.close();
					if(outChannel != null)
						outChannel.close();
				} catch (IOException e2) {
					e2.printStackTrace();
				}

			}
		}
	}
	
	/**
	 * 拷贝目录
	 * @param oldPath
	 * @param newPath
	 * @return
	 */
	public static void copyFolder(File oldPath,String newPath){
		try {
			(new File(newPath)).mkdirs(); //如果文件夹不存在,则建立新文件夹
			
			String[] file = oldPath.list();
			File temp = null;
			
			for(int i=0;i<file.length;i++){
				temp = new File(oldPath,file[i]);
				
				if(temp.isFile()){
					FileInputStream input = new FileInputStream(temp);
					FileOutputStream output = new FileOutputStream(newPath + File.separator + (temp.getName()).toString());
					
					byte[] b = new byte[1024 * 5];
					int len;
					
					while((len = input.read(b)) != -1){
						output.write(b, 0, len);
					}
					
					output.flush();
					output.close();
					input.close();
					
					if(temp.isDirectory()){//如果是子文件夹
						copyFolder(new File(oldPath + File.separator + file[i]),newPath + File.separator + file[i]);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 取指定目录下的所有文件列表,包括子目录
	 * @param baseDir  指定的目录
	 * @return
	 */
	public static List<File> getSubFiles(File baseDir){
		List<File> ret = new ArrayList<File>();
		File[] tmp = baseDir.listFiles();
		
		for(int i=0;i<tmp.length;i++){
			if(tmp[i].isFile())
				ret.add(tmp[i]);
			if(tmp[i].isDirectory())
				ret.addAll(getSubFiles(tmp[i]));
		}
		return ret;
	}
	
	/**
	 * 给定根目录,返回一个文件名对于该根目录的相对路径,用于zip文件中的路径
	 * @param baseDir 根目录
	 * @param realFileName 实际文件名
	 * @return
	 */
	public static String getAbsFileName(String baseDir,File realFileName){
		if(baseDir.equals(realFileName.getAbsolutePath())){
			return baseDir;
		}
		File real = realFileName;
		File base = new File(baseDir);
		
		String ret = real.getName();
		while(true){
			real = real.getParentFile();
			if(real == null){
				break;
			}
			if(real.equals(base)){
				break;
			}else{
				ret = real.getName() + File.separator + ret;
			}
		}
		return ret;
	}
	
	/**
	 * 缩压缩功能,将ZIP_FILENAME文件解压缩到ZIP_DIR目录下
	 * @param zipFile
	 * @param destDir
	 * @throws Exception
	 * @throws IOException
	 */
	public static void upZipFile(File zipFile,String destDir) throws Exception, IOException{
		ZipFile zfile = new ZipFile(zipFile);
		Enumeration<?> zList = zfile.entries();
		ZipEntry ze = null;
		byte[] buf = new byte[1024];
		while(zList.hasMoreElements()){
			ze = (ZipEntry)zList.nextElement();
			if(ze.isDirectory()){
				File f= new File(destDir + ze.getName());
				f.mkdirs();
				continue;
			}
			OutputStream os = new BufferedOutputStream(new FileOutputStream(getRealFileName(destDir,ze.getName())));
			InputStream is = new BufferedInputStream(zfile.getInputStream(ze));
			
			int readLen = 0;
			
			while((readLen = is.read(buf,0,1024))!= -1){
				os.write(buf, 0, readLen);
			}
			is.close();
			os.close();
		}
		zfile.close();
	}
	
	/**
	 * 拷贝全部文件到指定目录
	 * @param path
	 * @param dest
	 * @param pattern
	 * @param reversed
	 * @param override
	 */
	public static void copyAllFileTo(String path,String dest,String pattern,boolean reversed,boolean override){
		File file = new File(path);
		
		if(!file.exists()){
			return ;
		}
		
		if(!file.isDirectory()){
			return ;
		}
		
		String[] tempList = file.list();
		File temp = null;
		
		for(int i=0;i<tempList.length;i++){
			if(path.endsWith(File.separator)){
				temp = new File(path + temp);
			}else{
				temp = new File(path + File.separator + tempList[i]);
			}
			
			if(temp.isFile()){
				String destf = dest + File.separator +temp.getName();
				if(reversed && !temp.getName().matches(pattern)){
					copyFile(temp.getAbsolutePath(), destf, override);
				}else if(!reversed && temp.getName().matches(pattern)){
					copyFile(temp.getAbsolutePath(), destf, override);
				}
			}
			if(temp.isDirectory()){
				copyAllFileTo(path + File.separator +tempList[i],dest,pattern,reversed,override);
			}
		}
		
	}
}

 

分享到:
评论

相关推荐

    file_util.py

    file_util.py

    cw-util-file-encryptdecrypt.rar

    本篇将详细解读一个名为“cw-util-file-encryptdecrypt.rar”的自开发文件加密解密工具,它采用了当前广泛使用的加密解密方法,适用于各类项目集成,并附带了具体的测试方案,旨在为用户提供高效且安全的数据保护...

    C#工具类BitVector CookieUtil DES FileUtil HttpUtil ImageFile JavaScriptString JsonHelper StringUtil Thumbnail Utils WebFileInfo

    BitVector CookieUtil DES FileUtil HttpUtil ImageFile JavaScriptString JsonHelper StringUtil Thumbnail Utils WebFileInfo

    AndroidUtil:Android 开发 工具类 总结

    3. File Util:处理文件读写、文件夹创建、文件压缩和解压等操作,方便开发者进行本地数据存储。 4. Data Util:提供数据转换和解析功能,例如JSON和XML的解析,日期时间的格式化,以及加密解密等。 5. Log Util:...

    util.zip_util

    1. **压缩文件/目录**:`zip_util`可能有一个或多个函数,如`compress_file`或`compress_directory`,用于将单个文件或整个目录压缩成ZIP文件。这些函数可能会接受文件路径、目标ZIP文件名以及压缩级别等参数。 2. ...

    C# Util 实用工具类

    为了提高开发效率,程序员们常常会创建一些实用工具类库,如"C# Util",它整合了多种常用的功能模块,使得代码复用变得更为便捷。下面将详细阐述这个工具类库中的主要组成部分及其应用场景。 1. **Json**: JSON...

    util-linux-ng-util-linux-ng-2.17.2-12.24.el6_8.1.zip

    最后,fsck(File System Check)是用于检查和修复文件系统错误的实用程序。在Linux中,文件系统的完整性至关重要,因为任何数据损坏都可能导致严重的系统问题。fsck可以定期或者在系统启动时自动运行,对指定的文件...

    TreeFile.txt

    import java.io.File; import java.util.ArrayList; import java.util.List; /** * * 项目名称:FileTest * 类名称:TreeFile * 类描述:将制定目录下得所有子目录和文件按树形输出 * 创建时间:2011-10-19 ...

    apr-util-1.6.1.zip

    rm: cannot remove `libtoolT': No such file or directory 解决: configure中#$RM "$cfgfile" 3、apr-util-1.6.1.tar 报错: fatal error:expat.h:no such file or directory  #include compile interrupt ...

    JAVA课件 swing io util

    例如,可以使用`java.nio.file.Files`类的readAllBytes()方法读取整个文件到字节数组,或者使用`java.util.zip`包压缩和解压缩文件。 总的来说,Java Swing负责构建用户界面,IO负责数据的传输,而Util提供了许多...

    Java常用工具类UtilClass

    例如,`readFileToString()`可以读取文件内容为字符串,`writeStringToFile()`则可以将字符串写入文件。 - 文件路径处理也是`FileUtil`的一部分,如获取绝对路径 (`getAbsolutePath()`)、判断文件是否存在 (`exists...

    MD5Util.zip

    2. **文件MD5校验**:对于大文件,MD5Util可能还包含一个方法,如`calculateFileMD5(File file)`,用于计算文件的MD5值。这个过程涉及到读取文件内容并分块计算,最后将所有块的MD5值合并得到整个文件的MD5摘要。 3...

    Read-File-Util.py

    按照一定规则,读取EXCEL的数据 文档介绍:https://blog.csdn.net/weixin_43664254/category_9975078.html 自动化测试用例要怎么写文章里边写的

    Java常用Util类

    10. **File**: 表示文件和目录路径名的抽象表示形式,提供了文件和目录的基本操作。 11. **Scanner**: 用于从输入源(如键盘、文件)读取用户输入的数据。 12. **Objects**: 提供了一些实用的静态方法,如对象的...

    用java.util.zip包现数据压缩与解压

    ### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....

    java常用util工具类

    例如,`readFileToString()`可以将整个文件内容读取为一个字符串,`writeStringToFile()`则可以将字符串写入到文件。此外,`exists()`和`mkdirs()`分别用于检查文件是否存在以及创建多级目录。在处理文件时,`...

    java.util.zip 解压缩文件,ZIP格式压缩文件.rar

    在Java编程语言中,`java.util.zip` 是一个非常重要的包,它提供了处理各种压缩格式(如ZIP和GZ)的工具。在这个场景中,我们将深入探讨如何使用这个包来解压缩和压缩ZIP格式的文件。`java.util.zip` 包包含几个关键...

    File-Tail-0.99.3.tar.gz

    此外,还有C/C++源代码文件,如main.c、util.c等,它们包含了程序的主要逻辑和辅助函数。通过阅读这些源代码,开发者可以了解File-Tail如何实现文件监控,包括文件句柄管理、信号处理、内存管理等方面的知识。 在...

    net.mindview.util.jar

    和`net.mindview.util.TextFile`。这表明这个库可能专注于提供打印和文本文件操作的工具。`Print`类可能包含一系列静态方法,用于格式化和输出信息到控制台或者日志文件。而`TextFile`类则可能封装了读取、写入和...

Global site tag (gtag.js) - Google Analytics