java File文件操作共用方法整理
package org.jelly.util; import java.io.BufferedReader;
import java.io.BufferedWriter;
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.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.jelly.code.IndexCode;
import org.jelly.exception.ExecutetimeException;
/**
* 文件经常使用的操作的工具类
* @since 1.0.0
*/
public class FileUtil { private FileUtil(){} private static final String LOCK = "_LOCK";
private static final int BUFFER_SIZE = 1024 * 1024 / 2; /**
* <des> 文件拷贝, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush </des>
* @param in InputStream
* @param out OutputStream
* @since 1.0.0
*/
public static void copyFile(InputStream in, OutputStream out){
try {
byte[] buffer = new byte[BUFFER_SIZE];
int read;
while((read = in.read(buffer)) != IndexCode.EOF.toCode()){
out.write(buffer, 0, read);
}
} catch (Throwable e) {
throw new ExecutetimeException(e);
} finally {
closeStream(in, out);
}
} /**
* <des> 写出, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush </des>
* @since 1.6.0
*/
public static void write(InputStream in, OutputStream out){
copyFile(in, out);
} /**
* <des> 字符串内容写出, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush </des>
* @since 1.6.0
*/
public static void write(String text, OutputStream out){
try {
out.write(text.getBytes());
} catch (Throwable e) {
throw new ExecutetimeException(e);
} finally {
closeStream(out);
}
} /**
* <des> 字符串内容写出到文件, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush </des>
* @since 1.6.0
*/
public static void write(String text, File file){
BufferedReader reader = null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new StringReader(text));
writer = new BufferedWriter(new FileWriter(file));
char[] buffer = new char[BUFFER_SIZE];
int read;
while((read = reader.read(buffer)) != IndexCode.EOF.toCode()){
writer.write(buffer, 0, read);
}
} catch (Throwable e) {
throw new ExecutetimeException(e);
} finally {
closeStream(reader, writer);
}
} /**
* <des> 读取获得文件内容 </des>
* @param pathname 文件全路径名称
* @return 读取获得的文件内容
* @since 1.0.0
*/
public static String readFile(String pathname){
return readFile(new File(pathname));
} /**
* <des> 读取获得文件内容 </des>
* @param file 文件对象
* @return 读取获得的文件内容
* @since 1.0.0
*/
public static String readFile(File file){
String[] contents = readLineFile(file);
StringBuilder builder = new StringBuilder();
for(String content : contents){
builder.append(content);
}
return builder.toString();
} /**
* <des> 按行读取文件, 文件的每一行作为数组的一个元素 </des>
* @param pathname 文件全路径名称
* @return 数组
* @since 1.0.0
*/
public static String[] readLineFile(String pathname){
return readLineFile(new File(pathname));
} /**
* <des> 按行读取文件, 文件的每一行作为数组的一个元素 </des>
* @param file 文件对象
* @return 数组
* @since 1.0.0
*/
public static String[] readLineFile(File file){
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
LinkedList<String> list = new LinkedList<String>();
String read;
while((read = reader.readLine()) != null){
list.add(read);
}
return ArrayUtil.asArray(list);
} catch (Throwable e) {
throw new ExecutetimeException(e);
} finally {
closeStream(reader);
}
} /**
* <des> 获取文件夹下全部的文件对象 </des>
* @param directory 文件文件夹对象
* @return 文件对象列表
* @since 1.0.0
*/
public static List<File> listFiles(File directory){
return listFiles(directory, null);
} /**
* <des> 获取文件夹下全部由參数指定类型的文件对象 </des>
* @param source 文件文件夹对象
* @param filter 期望得到的文件的后缀名称
* @return 文件对象列表
* @since 1.0.0
*/
public static List<File> listFiles(File source, String filter){
File[] fileList = source.listFiles();
List<File> list = new ArrayList<File>();
filter = filter == null ? null : filter.toLowerCase();
if(fileList != null && fileList.length > 0){
for(File file : fileList){
if(file.isFile()){
add(list, file, filter);
}else if(file.isDirectory()){
list.addAll(listFiles(file, filter));
}
}
}else if(source.isFile()){
add(list, source, filter);
}
return list;
} /**
* <des> 在參数指定的文件夹中查找文件 </des>
* @param dirpath 文件文件夹全路径名称
* @param filename 查找的文件名
* @return 若查找的到, 则返还该文件对象, 若查找不到, 则返还null
* @since 1.0.0
*/
public static File findFile(String dirpath, String filename){
return findFile(new File(dirpath), filename);
} /**
* <des> 在參数指定的文件夹中查找文件 </des>
* @param directory 文件文件夹对象
* @param filename 查找的文件名
* @return 若查找的到, 则返还该文件对象, 若查找不到, 则返还null
* @since 1.0.0
*/
public static File findFile(File directory, String filename){
String filter = StringUtil.substringAfterLastWith(filename, ".");
List<File> files = listFiles(directory, filter);
if(files.size() == 0) return null;
for(File file : files){
if(file.getAbsolutePath().endsWith(filename)){
return file;
}
}
return null;
} /**
* <des> 删除文件或文件夹 </des>
* @param file 文件或文件文件夹对象
* @since 1.0.0
*/
public static void delete(File file){
synchronized (LOCK) {
if(file.isFile()){
file.delete();
}else if(file.isDirectory()){
File[] files = file.listFiles();
for(File item : files){
delete(item);
}
}
file.delete();
}
} /**
* <des> 创建文件夹 </des>
* @param pathname 文件夹名称
* @return 若文件夹不存在则创建, 若存在则直接返还true
* @since 1.0.0
*/
public static boolean createDir(String pathname){
return createDir(new File(pathname));
} /**
* <des> 创建文件夹 </des>
* @param dir 文件夹对象
* @return 若文件夹不存在则创建, 若存在则直接返还true
* @since 1.0.0
*/
public static boolean createDir(File dir){
synchronized (LOCK) {
if(!dir.exists()){
return dir.mkdirs();
}
return true;
}
} /**
* <des> 获取FileInputStream实例 </des>
* @since 1.0.0
*/
public static FileInputStream getFileInputStream(String pathname){
return getFileInputStream(new File(pathname));
} /**
* <p><des> 获取FileInputStream实例 </des></p>
* @since 1.0.0
*/
public static FileInputStream getFileInputStream(File file){
try {
return new FileInputStream(file);
} catch (FileNotFoundException e) {
throw new ExecutetimeException(e);
}
} /**
* <p><des> 获取FileOutputStream实例 </des></p>
* @since 1.0.0
*/
public static FileOutputStream getFileOutputStream(String pathname){
return getFileOutputStream(new File(pathname), false);
} /**
* <p><des> 获取FileOutputStream实例 </des></p>
* @since 1.0.0
*/
public static FileOutputStream getFileOutputStream(String pathname, boolean append){
return getFileOutputStream(new File(pathname), append);
} /**
* <p><des> 获取FileOutputStream实例 </des></p>
* @since 1.0.0
*/
public static FileOutputStream getFileOutputStream(File file){
return getFileOutputStream(file, false);
} /**
* <p><des> 获取FileOutputStream实例 </des></p>
* @since 1.0.0
*/
public static FileOutputStream getFileOutputStream(File file, boolean append){
try {
return new FileOutputStream(file, append);
} catch (FileNotFoundException e) {
throw new ExecutetimeException(e);
}
} // 加入文件到列表
private static void add(List<File> list, File file, String filter){
if(filter == null){
list.add(file);
}else if(file.getAbsolutePath().toLowerCase().endsWith(filter)){
list.add(file);
}
} }
java File文件操作共用方法整理的更多相关文章
- Java File文件操作 创建文件\目录,删除文件\目录
Java手册 java.io 类 File java.lang.Object java.io.File 所有已实现的接口: Serializable, Comparable<File> p ...
- JAVA file文件操作
/** *文件重命名 * @param oldname 原来的文件名 * @param newname 新文件名 */ @RequestMapping("renameFile") ...
- Java File 类的使用方法详解
Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看 ...
- Java File 类的使用方法详解(转)
转自:http://www.codeceo.com/article/java-file-class.html Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对J ...
- java常见文件操作
收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...
- java字符流操作flush()方法及其注意事项
java字符流操作flush()方法及其注意事项 flush()方法介绍 查阅文档可以发现,IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 ...
- HTML5 本地文件操作之FileSystemAPI整理(二)
一.文件目录操作 1.DirectoryEntry对象 属性: 1.isFile: 操作对象的是否为文件,DirectoryEntry对象固定其值为false 2.isDirectory: 操作对象是 ...
- File 文件操作类 大全
File 文件操作类 大全 许多人都会对文件操作感到很难 我也是 但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴 等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦 ...
- [转]python file文件操作--内置对象open
python file文件操作--内置对象open 说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...
随机推荐
- 九度oj 题目1491:求1和2的个数
题目描述: 给定正整数N,函数F(N)表示小于等于N的自然数中1和2的个数之和,例如:1,2,3,4,5,6,7,8,9,10序列中1和2的个数之和为3,因此F(10)=3.输入N,求F(N)的值,1 ...
- MySQL5.7 服务 crash 后无法启动
事发背景 测试环境更换数据盘,直接采取在线将数据目录暴力拷贝到新盘,然后将原服务关闭,启用新盘. 服务是可以正常启动的,但是没多会开发就反应服务down了,错误日志输出 -- :: InnoDB: F ...
- 【bzoj2229】[Zjoi2011]最小割 分治+网络流最小割
题目描述 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中,则称这个划分 ...
- SPOJ 375 Query on a tree【树链剖分】
题目大意:给你一棵树,有两个操作1.修改一条边的值,2.询问从x到y路径上边的最大值 思路:如果树退化成一条链的话线段树就很明显了,然后这题就是套了个树连剖分,调了很久终于调出来第一个模板了 #inc ...
- BZOJ3611 [Heoi2014]大工程 【虚树】
题目 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道. 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上. 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a ...
- 洛谷P1435 回文字串
题目背景 IOI2000第一题 题目描述 回文词是一种对称的字符串.任意给定一个字符串,通过插入若干字符,都可以变成回文词.此题的任务是,求出将给定字符串变成回文词所需要插入的最少字符数. 比如 “A ...
- NVMe与SCM结合将赋予存储介质的能力
转自:SCM是什么鬼,NVMe与其结合将赋予存储介质哪些能力? 全SSD闪存阵列在企业级存储得到广泛应用,相比传统机械硬盘,它的延迟.性能和可靠性都有了显著提高.许多早期开发商抓住其闪存技术优势的机遇 ...
- dedecms--需要注意的细节
在系统的系统配置参数里面修改一些参数 1:站点设置: (1):站点根网址:本地测试的话:就是你设置的虚拟主机:http://www.abc.cc (2):网页主页链接:为空 2:核心设置: DedeC ...
- ORA-01940: cannot drop a user that is currently connected 问题解析
https://www.linuxidc.com/Linux/2012-12/76448.htm
- Invalid regular expression: unmatched parentheses
Unmatched ) in Javascript regular expression您的某些字符串包含错误')'.你需要逃避这个.这是这样做的功能: function escapeRegExp(s ...