`

文件的处理

阅读更多

package my.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.io.InputStream;

public class FileUtil
{
	/**
	 * String 转化为 InputStream
	 * @param str
	 * @return
	 */
	public static InputStream StringToInputStream(String str)
	{
		ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes());
		return stream;
	}
	
	/**
	 * byte[] 转化为 InputStream
	 * @param str
	 * @return
	 */
	public static InputStream ByteToInputStream(byte[] b)
	{
		ByteArrayInputStream stream = new ByteArrayInputStream(b);
		return stream;
	}

	/**
	 * InputStream 转化为 String
	 * @param is
	 * @return
	 */
	public static String InputStreamToString(InputStream is)
	{
		try
		{
			BufferedReader in = new BufferedReader(new InputStreamReader(is));
			StringBuffer buffer = new StringBuffer();
			String line = "";
			while ((line = in.readLine()) != null)
			{
				buffer.append(line + "\r\n");
			}
			in.close();
			return buffer.toString();
		}
		catch (Exception ex)
		{
			return null;
		}
	}

	/**
	 * 根据文件夹路径创建文件夹
	 * @param filePath
	 */
	public static void createFolder(File file)
	{
		if (!file.exists())
		{
			file.mkdirs();
		}
	}

	/**
	 * 根据文件路径或文件夹路径创建文件夹
	 * @param filePath
	 */
	public static void createFolder(String filePath)
	{
		File f = new File(filePath);
		createFolder(f);
	}

	/**
	 * 根据文件路径或文件夹路径创建所属目录(父)路径
	 * @param filePath
	 */
	public static void createParentFolder(String filePath)
	{
		File file = new File(filePath);
		createParentFolder(file);
	}

	/**
	 * 根据文件路径或文件夹路径创建所属目录(父)路径
	 * @param filePath
	 */
	public static void createParentFolder(File file)
	{
		createFolder(file.getParent());
	}

	/**
	 * 读取文件(只支持文本文件)
	 * @param file 文件
	 * @return
	 */
	public static String readFile(File file)
	{
		try
		{
			if(!file.exists() || file.isDirectory()) return "";
			String s = InputStreamToString(new FileInputStream(file));
			if(s == null) return "";
			return s;
		}
		catch (IOException e)
		{
			e.printStackTrace();
			return "";
		}
	}

	/**
	 * 读取文件(只支持文本文件)
	 * @param fileName 文件名称
	 * @return
	 */
	public static String readFile(String fileName)
	{
		if(fileName == null) return "";
		File file = new File(fileName);
		return readFile(file);
	}

	/**
	 * 将指定文件流写入指定的file对象
	 * @param file
	 * @param fin
	 * @param override 是否覆盖
	 * @return 成功返回true,失败返回false
	 */
	public static boolean writeFile(File file, InputStream fin, boolean override)
	{
		try
		{
			if(!override && file.exists()) return false;
			if(file.exists() && file.isDirectory()) return false;
			// 将该数据流写入到指定文件中
			FileOutputStream fout = new FileOutputStream(file);
			byte[] buffer = new byte[4096];// To hold file contents
			int bytes_read;
			while ((bytes_read = fin.read(buffer)) != -1)// Read until EOF
			{
				fout.write(buffer, 0, bytes_read);
			}
			if (fin != null)
			{
				try
				{
					fin.close();
				}
				catch (IOException e)
				{
					return false;
				}
			}
			if (fout != null)
			{
				try
				{
					fout.close();
				}
				catch (IOException e)
				{
					return false;
				}
			}
			return true;
		}
		catch (IOException ex)
		{
			ex.printStackTrace();
		}
		return false;
	}

	/**
	 * 写入文件
	 * @param file 文件对象
	 * @param content 文件内容
	 * @param override 是否覆盖
	 * @return 成功返回true,失败返回false
	 */
	public static boolean writeFile(File file, String content, boolean override)
	{
		if (content == null) content = "";
		return writeFile(file, StringToInputStream(content), override);
	}

	/**
	 * 写入文件
	 * @param fileName 文件名称(全路径)
	 * @param content 文件内容
	 * @param override 是否覆盖
	 * @return 成功返回true,失败返回false
	 */
	public static boolean writeFile(String fileName, String content, boolean override)
	{
		try
		{
			if (fileName == null || fileName.trim().length() == 0) return false;
			File file = new File(fileName);
			return writeFile(file, content, override);
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 写入文件
	 * @param file 文件对象
	 * @param content 文件内容
	 * @return 成功返回true,失败返回false
	 */
	public static boolean writeFile(File file, String content)
	{
		return writeFile(file, content, true);
	}

	/**
	 * 写入文件
	 * @param fileName 文件名称(全路径)
	 * @param content 文件内容
	 * @param override 是否覆盖
	 * @return 成功返回true,失败返回false
	 */
	public static boolean writeFile(String fileName, String content)
	{
		return writeFile(fileName, content, true);
	}

	/**
	 * @param from 源文件或文件夹对象
	 * @param to 目标文件或文件夹对象
	 */
	public static void copy(File from, File to)
	{
		copy(from, to, true, true);
	}

	/**
	 * @param from 源文件或文件夹路径
	 * @param to 目标文件或文件夹路径
	 */
	public static void copy(String from, String to)
	{
		copy(from, to, true, true);
	}

	/**
	 * @param from 源文件或文件夹路径
	 * @param to 目标文件或文件夹路径
	 * @param override 复制过程中遇到已存在的文件夹或文件是否覆盖改写,默认为true:覆盖
	 * @param copySubdir 复制文件夹时,是否复制子文件夹,默认为true
	 */
	public static void copy(String from, String to, boolean override, boolean copySubdir)
	{
		File fromFile = new File(from);
		File toFile = new File(to);
		copy(fromFile, toFile, override, copySubdir);
	}

	/**
	 * from复制到to
	 * @param from 源文件或文件夹对象
	 * @param to 目标文件或文件夹对象
	 * @param override 复制过程中遇到已存在的文件夹或文件是否覆盖改写,默认为true:覆盖
	 * @param copySubdir 复制文件夹时,是否复制子文件夹,默认为true
	 * @return
	 */
	public static void copy(File from, File to, boolean override, boolean copySubdir)
	{
		if (from == null || to == null)
			return;
		if (!from.exists())
			return;// 源文件或文件夹不存在
		if (from.isDirectory())
		{
			if (to.exists())// 当目标已存在
			{
				if (to.isFile())// 文件夹不能复制到文件中
				{
					return;
				}
				if (!override)
					return;// 当目标已存在,且不能覆盖时
			}
			if (!to.exists())
				to.mkdirs();
			String[] fileList = from.list();
			if (fileList == null)
				return;
			for (int i = 0; i < fileList.length; i++)
			{
				File f = new File(from.getAbsoluteFile() + "/" + fileList[i]);
				if (f.isDirectory() && !copySubdir)
					continue;// 不复制子目录
				File t = new File(to.getAbsoluteFile() + "/" + fileList[i]);
				copy(f, t, override, copySubdir);
			}
		}
		else if (from.isFile())
		{
			copyFile(from, to, override);
		}
	}

	/**
	 * 复制文件from复制到to
	 * @param from 源文件或文件夹对象
	 * @param to 目标文件或文件夹对象
	 * @param override
	 * @return 返回复制结果
	 */
	public static boolean copyFile(File from, File to, boolean override)
	{
		boolean fail = false;
		try
		{
			if (from.exists() && from.isFile() && !(to.exists() && to.isDirectory()))
			{
				if (!override && to.exists()) return fail;// 当目标已存在,且不能覆盖时
				if (!to.exists())
				{
					String filePath = to.getParent();
					File f = new File(filePath);
					f.mkdirs();
				}
				return writeFile(to, (new FileInputStream(from)), override);
			}
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
		return fail;
	}

	/**
	 * 删除整个文件夹
	 * @param dir
	 * @return
	 */
	public static boolean deleteDir(String dirPath)
	{
		File dir = new File(dirPath);
		return delete(dir, true, true, false);
	}

	/**
	 * 删除整个文件夹
	 * @param dir
	 * @return
	 */
	public static boolean deleteDir(File dir)
	{
		return delete(dir, true, true, false);
	}

	/**
	 * 删除整个文件夹下的所有文件和子文件夹,该文件夹不删除
	 * @param dir
	 * @return
	 */
	public static boolean clearDir(String dirPath)
	{
		File dir = new File(dirPath);
		return delete(dir, false, true, false);
	}

	/**
	 * 删除整个文件夹下的所有文件和子文件夹,该文件夹不删除
	 * @param dir
	 * @return
	 */
	public static boolean clearDir(File dir)
	{
		return delete(dir, false, true, false);
	}

	/**
	 * 只删除整个文件夹下的所有文件(包括子目录),目录结构不删除
	 * @param dir
	 * @return
	 */
	public static boolean deleteAllFiles(String dirPath)
	{
		File dir = new File(dirPath);
		return delete(dir, false, true, true);
	}

	/**
	 * 只删除整个文件夹下的所有子文件夹(包括子目录), 目录结构不删除
	 * @param dir
	 * @return
	 */
	public static boolean deleteAllFiles(File dir)
	{
		return delete(dir, false, true, true);
	}

	/**
	 * 删除
	 * @param dir 删除的文件夹或文件
	 * @param isDeleteDir 是否删除此文件夹(只在删除对象为文件夹时此值有效) isDeleteDir有效且值为false时以下参数有效
	 * @param isDeleteSubDir 是否删除子文件夹
	 * @param isKeepStructure 是否保留子文件夹的目录结构
	 * @return
	 */
	public static boolean delete(File file, boolean isDeleteDir, boolean isDeleteSubDir, boolean isKeepStructure)
	{
		if (file.isDirectory())
		{
			String[] children = file.list();
			for (int i = 0; i < children.length; i++)
			{
				File subFile = new File(file, children[i]);
				if (isDeleteDir || subFile.isFile())
				{
					boolean success = delete(subFile, true, true, false);
					if (!success)
					{
						return false;
					}
				}
				else
				{
					if (isDeleteSubDir)// 是否删除子目录
					{
						boolean success = delete(subFile, !isKeepStructure, true, isKeepStructure);
						if (!success)
						{
							return false;
						}
					}
				}
			}
			if (isDeleteDir)
				return file.delete();
			return true;
		}
		return file.delete();
	}
	
	public static File getFile(String path)
	{
		try
		{
			File f = new File(path);
			return f;
		}
		catch(NullPointerException e)
		{
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 根据目录取得文件列表
	 * @param path
	 * @return
	 */
	public static File[] getFiles(String path)
	{
		File file = new File(path);
		return file.listFiles();
	}

	/**
	 * 判断是否已存在同名文件,存在同名文件则重名为"原文件名(数字).原扩展名"
	 * @param fileName 文件名
	 * @param realPath 真实路径
	 * @return
	 */
	public static String getRefrainFileName(String fileName, String realPath)
	{
		if (fileName == null || fileName.trim().length() == 0)
			return "";
		String arrFileName[];
		arrFileName = fileName.split("[.]");// 正则表达式
		String fileExt = arrFileName[arrFileName.length - 1];// 文件扩展名
		String _fileName = fileName;// 保存新的文件名
		int countLogger = 1;// 记数器
		realPath = realPath + "/";
		File file = new File(realPath + fileName);// 读入文件对象
		while (file.exists())// 判断文件是否存在
		{
			int fileNameLength = fileName.lastIndexOf(".");
			if (fileNameLength >= 0 && fileNameLength < fileName.length())
			{
				_fileName = fileName.substring(0, fileNameLength) + "(" + countLogger + ")" + "." + fileExt;
			}
			else
			{
				_fileName = _fileName + "(" + countLogger + ")";
			}
			countLogger++;
			file = new File(realPath + _fileName);// 重新读入文件对象
		}
		return _fileName;
	}

	/**
	 * 返回指定文件夹或文件的大小,单位bit
	 * @param path
	 * @return
	 */
	public static long getDirSize(String path)
	{
		long rtnSize = 0;
		File file = new File(path);
		if (!file.exists())
		{
			return rtnSize;
		}
		if (!file.isDirectory())
		{
			return file.length();
		}
		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())
			{
				rtnSize += temp.length();
			}
			if (temp.isDirectory())
			{
				double inttemp = getDirSize(path + "/" + tempList[i]);
				rtnSize += inttemp;// 先叠加子文件夹里面的文件
			}
		}
		return rtnSize;
	}

	/**
	 * 序列化对象到文件
	 * @param obj
	 * @param fileName
	 */
	public static void serializeToFile(Object obj, String fileName)
	{
		try
		{
			ObjectOutput out = new ObjectOutputStream(new FileOutputStream(fileName));
			out.writeObject(obj);
			out.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * 从文件反序列化出对象
	 * @param fileName
	 * @return
	 */
	public static Object deserializeFromFile(String fileName)
	{
		try
		{
			File file = new File(fileName);
			ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
			Object obj = in.readObject();
			in.close();
			return obj;
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 取得文件后缀名,文件不存在则返回null,没后缀名则返回""
	 * @param file
	 * @return
	 */
	public static String getFileExt(File file)
	{
		try
		{
			if(file.isFile())
			{
				String name = file.getName();
				int len = name.lastIndexOf(".");
				if(len != -1)
					return name.substring(len + 1);
				return "";
			}
			return null;
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
		return null;
	}
}
分享到:
评论

相关推荐

    文件处理申请单(表格模板、DOC格式).doc

    文件处理申请单(表格模板、DOC格式).doc是管理部門使用的文件处理申请单模板,用于记录和管理文件的处理过程。该模板包括以下几个主要部分:文件处理状态、文件信息、申请信息、签收信息和流程信息。 知识点1:...

    易语言大文件处理

    易语言大文件处理源码,大文件处理,打开对象,关闭对象,取对象长度,移动对象位置,取对象位置,读入对象,CreateFile,CloseHandle,SetFilePointer,SetLastError,ReadFile,GetFileSizeEx

    将pcap文件处理为csv文件,并根据协议类型分开保存

    需要三个空白文件夹,一个存放数据包,一个存放解析时的json文件,还有一个存放最终的csv文件,并且最终制成数据集的形式

    sgy地震波数据文件及MATLAB处理sgy文件的程序!

    MATLAB中的SGY文件处理程序通常涉及以下几个关键步骤: 1. **读取SGY文件**:MATLAB程序首先需要读取SGY文件,这通常通过自定义的函数实现,因为MATLAB标准库中并未直接支持SGY格式。读取函数会解析文件头信息,...

    C#文件处理模块(封装了一些常见的文件和文件夹操作。)

    该C#源文件包含了一些函数封装了一些常见的文件和文件夹操作。

    csv文件处理代码(读写)

    csv文件的读写代码!希望对大家有所帮助!

    Java读取大文件的处理

    Java读取大文件的处理 Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是...

    图片文件处理工具类

    图片文件处理工具类

    基于Python开发的档案转换与ico文件处理设计源码

    本项目是一款基于Python的档案转换与ico文件处理工具源码,共计30个文件,涵盖14个pyc字节码文件、8个Python源代码文件、5个XML配置文件、1个.gitignore配置文件、1个Idea项目文件和1个ico图标文件。该工具旨在提供...

    基于Python和CDO工具的NC文件处理设计源码

    该项目为基于Python和CDO工具设计的NC文件处理源码,包含62个文件,其中58个为Python源文件、2个R语言脚本文件以及2个Markdown文件。主要功能是利用Python和CDO工具对NC文件进行高效处理。

    Django:Django静态文件与媒体文件处理.docx

    Django:Django静态文件与媒体文件处理.docx

    VC使用内存映射文件处理大文件

    visual c++ vc使用内存映射文件mapping file处理大文件

    处理vasp数据文件LOCPOT的f90脚本

    本程序为fortran脚本,可以处理vasp数据文件LOCPOT及CHGCAR,运行本程序无需输入任何参数, !得到功函数势曲线(需减掉费米能级)和电荷线分布(除以体积可得电荷线密度) !若在linux-shell下运行(把中文注释删掉...

    photoshop处理rgb格式文件的插件

    "photoshop处理.rgb格式文件的插件"是指用于增强Photoshop对RGB文件处理能力的外挂程序。这样的插件通常由Adobe或其他第三方开发商提供,它们可以扩展Photoshop的功能,比如提升色彩管理、增加滤镜效果、优化色彩...

    SI5338寄存器文件处理脚本

    处理SI5338 生成寄存器文件,将其转换成mif文件,即FPGA的存储器初始化文件

    CSV大文件分割工具.rar

    CSV文件是一种常见的...总之,"CSV大文件分割工具"是一个实用的工具,它解决了大CSV文件处理中的常见问题,提高了工作效率,并且降低了对系统资源的需求。在处理大量数据时,合理地运用这类工具能显著提升工作效果。

    Web Api 通过文件流 下载文件到本地实例

    在ASP.NET Web API中,通过文件流下载文件到本地是一个常见的功能需求,它涉及到网络通信、文件处理和HTTP协议等多个方面。在这个实例中,我们将深入探讨如何实现这一过程,以及涉及的关键技术和步骤。 首先,我们...

    SpringMVC文件上传,多文件上传实例

    这个方法需要一个或多个`MultipartFile`参数,并在其中进行文件处理。例如,可以将文件保存到服务器的某个目录,或者将其上传到云存储服务。 6. **处理多文件上传**: 对于多文件上传,用户可以在表单中添加多个`...

    mastercam2022机床文件和后处理文件.rar

    2022版本的Mastercam带来了诸多改进和新功能,尤其是在机床文件和后处理方面。 机床文件(Machine Files)在Mastercam中是至关重要的,它们包含了针对特定机床设备的操作指令和参数设定。这些文件通常以.MP4或.MP5...

    windows 文件分割工具

    在IT领域,尤其是在数据管理和日志分析中,经常会遇到大文件处理的问题。"Windows 文件分割工具"就是专门针对这类问题而设计的软件,用于将大文件分割成更小、更易于管理和处理的部分。这种工具特别适用于那些超出...

Global site tag (gtag.js) - Google Analytics