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);
		}
	}

}

时间: 2024-10-10 21:37:08

java File文件操作共用方法整理的相关文章

java file文件类操作使用方法大全

1.构造函数 [java] view plaincopy public class FileDemo { public static void main(String[] args){ //构造函数File(String pathname) File f1 =new File("c:\\zuidaima\\1.txt"); //File(String parent,String child) File f2 =new File("c:\\zuidaima",&quo

java常见文件操作

收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPath.exists()) { myFolderPath.mkdir(); } } catch (Exception e) { System.out.println("新建目录操作出错"); e.printStackTrace(); } //2.创建文件 //impor

File 文件操作类 大全

File  文件操作类  大全 许多人都会对文件操作感到很难  我也是  但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴  等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦   代码如下 : 1 /** 2 * Copyright © 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved. 3 */ 4 package

关于file文件操作的头文件 【LINUX】 (转载)

转自:http://blog.csdn.net/figo77ll/article/details/3156052 Linux下如果要对文件进行读取访问,需要包含至少以下两个头文件: #inlcude <unistd.h> #inlcude <fcntl.h> 其中fcntl.h包含了create和open命令,unistd包含了其他的诸如read, write, close等命令.很奇怪为什么不把fcntl的功能直接放到unistd里面呢.. 如果要对STDIN,STDOUT进行“

Android的file文件操作详解

Android的file文件操作详解 android的文件操作要有权限: 判断SD卡是否插入 Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); 获得sd卡根目录 File skRoot = Environment.getExternalStorageDirectory(); 获得私有根目录 File fileRoot = Context.getFilesDir()+""

java的文件操作类File

java.io.File类,是java获取文件/文件夹的所有属性,和完成所有相关操作的类 例子: 1 package test.file.IO; 2 3 import java.io.*; 4 public class TestFile{ 5 public static void main(String[] args){ 6 //1.File类是java用来处理文件的类,它可以获取文件的所有属性 和 完成文件所需要的所有操作 7 // 所以使用的第一步就是new一个File对象 8 // Fil

java IO文件操作简单基础入门例子,IO流其实没那么难

IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 try {             File inputFile = new File(args[0]);             if (!inputFile.exists()) {                 System.out.println("源文件不存在,程序终止");

Java api 入门教程 之 JAVA的文件操作

I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本能力.本章IO类的使用就从读写文件开始. 1 文件操作 文件(File)是 最常见的数据源之一,在程序中经常需要将数据存储到文件中,例如图片文件.声音文件等数据文件,也经常需要根据需要从指定的文件中进行数据的读取.当然, 在实际使用时,文件都包含一个的格式,这个格式需要程序员根据需要进行设计,读取已

java中文件操作《一》

在日常的开发中我们经常会碰到对文件的操作,在java中对文件的操作都在java.io包下,这个包下的类有File.inputStream.outputStream.FileInputStream.FileOutputStream.reader.writer.FileReader.FileWriter等等,其中对文件的操作又分为两大类,一类是字符流,一类是字节流.所谓的字符流是以字节(8b)为单位进行读/写,字符流即使用字符为单位读/写,java使用unicode编码,一个字符两个字节,下面分别对