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;
}
}
分享到:
相关推荐
java大批量文件处理
文件处理申请单(表格模板、DOC格式).doc是管理部門使用的文件处理申请单模板,用于记录和管理文件的处理过程。该模板包括以下几个主要部分:文件处理状态、文件信息、申请信息、签收信息和流程信息。 知识点1:...
易语言大文件处理源码,大文件处理,打开对象,关闭对象,取对象长度,移动对象位置,取对象位置,读入对象,CreateFile,CloseHandle,SetFilePointer,SetLastError,ReadFile,GetFileSizeEx
Gdal 命令行工具(DEM及图像栅格文件处理工具) Gdal_translate 可以将多种不同类型的栅格文件(DEM或图片JPG,JP2,PNG,TIF)进行格式转换如INT16 转float32 Gdal_translate /H可以查询使用的参数 其它的一些Gdal工具...
需要三个空白文件夹,一个存放数据包,一个存放解析时的json文件,还有一个存放最终的csv文件,并且最终制成数据集的形式
第3章 HTML5表单及文件处理.ppt 供大家查阅!属于课件类型。
文件处理申请单的知识点 文件处理申请单是管理部門的一种文档,用于记录和管理文件的处理过程。该文档通常包括文件的基本信息、处理状态、申请单位、申请人、申请日期、原制定文件单位、主管核准、申请原因、領用/...
BatchFiles 多功能批量文件处理系统,提供五种方式的文件批量重命名(文件名字符替换(-replace)、插入特定字符到文件名中(-insert)、文件名截取(-intercept)、文件名的大小写转换(-toggle)和重命名恢复(-...
该C#源文件包含了一些函数封装了一些常见的文件和文件夹操作。
该类主要对常见的一些文件操作进行了封装,如读写文件(UTF-8)、复制文件、删除文件,创建目录等
在C++编程中,文件流(File Stream)是处理输入/输出操作的重要工具,它使得程序可以方便地读写磁盘上的文件。...通过学习和理解这些代码,你可以更好地掌握C++在文件处理和字符串操作方面的功能,提升你的编程技能。
文件处理和异常处理【Python一周入门教程7】
csv文件的读写代码!希望对大家有所帮助!
Java读取大文件的处理 Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是...
不错的介绍linux 中常用的文件处理C函数的文档,使用该文档,可以更加快捷的进行学习
文件转换,文件处理,shell脚本
本项目是一款基于Python的档案转换与ico文件处理工具源码,共计30个文件,涵盖14个pyc字节码文件、8个Python源代码文件、5个XML配置文件、1个.gitignore配置文件、1个Idea项目文件和1个ico图标文件。该工具旨在提供...
Django:Django静态文件与媒体文件处理.docx
matlab对txt文件处理程序-自编写,对txt文件的批处理程序,自编写,可用,代码开发matlab对txt文件处理程序-自编写
该项目是一个基于Go语言的音频文件处理库EasyMIDI的设计源码,包含44个文件,其中包括32个Go源文件、5个MIDI文件、1个Git忽略文件、1个Dockerfile、1个LICENSE文件、1个Markdown文件、1个文本文件和1个Shell脚本文件...