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是管理部門使用的文件处理申请单模板,用于记录和管理文件的处理过程。该模板包括以下几个主要部分:文件处理状态、文件信息、申请信息、签收信息和流程信息。 知识点1:...
易语言大文件处理源码,大文件处理,打开对象,关闭对象,取对象长度,移动对象位置,取对象位置,读入对象,CreateFile,CloseHandle,SetFilePointer,SetLastError,ReadFile,GetFileSizeEx
需要三个空白文件夹,一个存放数据包,一个存放解析时的json文件,还有一个存放最终的csv文件,并且最终制成数据集的形式
MATLAB中的SGY文件处理程序通常涉及以下几个关键步骤: 1. **读取SGY文件**:MATLAB程序首先需要读取SGY文件,这通常通过自定义的函数实现,因为MATLAB标准库中并未直接支持SGY格式。读取函数会解析文件头信息,...
该C#源文件包含了一些函数封装了一些常见的文件和文件夹操作。
csv文件的读写代码!希望对大家有所帮助!
Java读取大文件的处理 Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是...
图片文件处理工具类
本项目是一款基于Python的档案转换与ico文件处理工具源码,共计30个文件,涵盖14个pyc字节码文件、8个Python源代码文件、5个XML配置文件、1个.gitignore配置文件、1个Idea项目文件和1个ico图标文件。该工具旨在提供...
该项目为基于Python和CDO工具设计的NC文件处理源码,包含62个文件,其中58个为Python源文件、2个R语言脚本文件以及2个Markdown文件。主要功能是利用Python和CDO工具对NC文件进行高效处理。
Django:Django静态文件与媒体文件处理.docx
visual c++ vc使用内存映射文件mapping file处理大文件
本程序为fortran脚本,可以处理vasp数据文件LOCPOT及CHGCAR,运行本程序无需输入任何参数, !得到功函数势曲线(需减掉费米能级)和电荷线分布(除以体积可得电荷线密度) !若在linux-shell下运行(把中文注释删掉...
"photoshop处理.rgb格式文件的插件"是指用于增强Photoshop对RGB文件处理能力的外挂程序。这样的插件通常由Adobe或其他第三方开发商提供,它们可以扩展Photoshop的功能,比如提升色彩管理、增加滤镜效果、优化色彩...
处理SI5338 生成寄存器文件,将其转换成mif文件,即FPGA的存储器初始化文件
CSV文件是一种常见的...总之,"CSV大文件分割工具"是一个实用的工具,它解决了大CSV文件处理中的常见问题,提高了工作效率,并且降低了对系统资源的需求。在处理大量数据时,合理地运用这类工具能显著提升工作效果。
在ASP.NET Web API中,通过文件流下载文件到本地是一个常见的功能需求,它涉及到网络通信、文件处理和HTTP协议等多个方面。在这个实例中,我们将深入探讨如何实现这一过程,以及涉及的关键技术和步骤。 首先,我们...
这个方法需要一个或多个`MultipartFile`参数,并在其中进行文件处理。例如,可以将文件保存到服务器的某个目录,或者将其上传到云存储服务。 6. **处理多文件上传**: 对于多文件上传,用户可以在表单中添加多个`...
2022版本的Mastercam带来了诸多改进和新功能,尤其是在机床文件和后处理方面。 机床文件(Machine Files)在Mastercam中是至关重要的,它们包含了针对特定机床设备的操作指令和参数设定。这些文件通常以.MP4或.MP5...
在IT领域,尤其是在数据管理和日志分析中,经常会遇到大文件处理的问题。"Windows 文件分割工具"就是专门针对这类问题而设计的软件,用于将大文件分割成更小、更易于管理和处理的部分。这种工具特别适用于那些超出...