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;  
      
    /** 
     * 文件拷贝, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush  
     * @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);  
        }  
    }  
      
    /** 
     * 写出, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush  
     * @since 1.6.0 
     */  
    public static void write(InputStream in, OutputStream out){  
        copyFile(in, out);  
    }  
  
    /** 
     * 字符串内容写出, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush  
     * @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);  
        }  
    }  
  
    /** 
     * 字符串内容写出到文件, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush  
     * @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);  
        }  
    }  
      
    /** 
     * 读取获得文件内容  
     * @param pathname 文件全路径名称 
     * @return 读取获得的文件内容 
     * @since 1.0.0 
     */  
    public static String readFile(String pathname){  
        return readFile(new File(pathname));  
    }  
      
    /** 
     * 读取获得文件内容  
     * @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();  
    }  
      
    /** 
     * 按行读取文件, 文件的每一行作为数组的一个元素  
     * @param pathname 文件全路径名称 
     * @return 数组 
     * @since 1.0.0 
     */  
    public static String[] readLineFile(String pathname){  
        return readLineFile(new File(pathname));  
    }  
      
    /** 
     * 按行读取文件, 文件的每一行作为数组的一个元素  
     * @param file 文件对象 
     * @return 数组 
     * @since 1.0.0 
     */  
    public static String[] readLineFile(File file){  
        BufferedReader reader = null;  
        try {  
            reader = new BufferedReader(new FileReader(file));  
            LinkedList list = new LinkedList();  
            String read;  
            while((read = reader.readLine()) != null){  
                list.add(read);  
            }  
            return ArrayUtil.asArray(list);  
        } catch (Throwable e) {  
            throw new ExecutetimeException(e);  
        } finally {  
            closeStream(reader);  
        }  
    }  
      
    /** 
     * 获取目录下所有的文件对象  
     * @param directory 文件目录对象 
     * @return 文件对象列表 
     * @since 1.0.0 
     */  
    public static List listFiles(File directory){  
        return listFiles(directory, null);  
    }  
      
    /** 
     * 获取目录下所有由参数指定类型的文件对象  
     * @param source 文件目录对象 
     * @param filter 期望得到的文件的后缀名称 
     * @return 文件对象列表 
     * @since 1.0.0 
     */  
    public static List listFiles(File source, String filter){  
        File[] fileList = source.listFiles();  
        List list = new ArrayList();  
        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;  
    }  
      
    /** 
     * 在参数指定的目录中查找文件  
     * @param dirpath 文件目录全路径名称 
     * @param filename 查找的文件名称 
     * @return 若查找的到, 则返还该文件对象, 若查找不到, 则返还null 
     * @since 1.0.0 
     */  
    public static File findFile(String dirpath, String filename){  
        return findFile(new File(dirpath), filename);  
    }  
      
    /** 
     * 在参数指定的目录中查找文件  
     * @param directory 文件目录对象 
     * @param filename 查找的文件名称 
     * @return 若查找的到, 则返还该文件对象, 若查找不到, 则返还null 
     * @since 1.0.0 
     */  
    public static File findFile(File directory, String filename){  
        String filter = StringUtil.substringAfterLastWith(filename, ".");  
        List files = listFiles(directory, filter);  
        if(files.size() == 0) return null;  
        for(File file : files){  
            if(file.getAbsolutePath().endsWith(filename)){  
                return file;  
            }  
        }  
        return null;  
    }  
      
    /** 
     * 删除文件或目录  
     * @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();  
        }  
    }  
      
    /** 
     * 创建目录  
     * @param pathname 目录名称 
     * @return 若目录不存在则创建, 若存在则直接返还true 
     * @since 1.0.0 
     */  
    public static boolean createDir(String pathname){  
        return createDir(new File(pathname));  
    }  
      
    /** 
     * 创建目录  
     * @param dir 目录对象 
     * @return 若目录不存在则创建, 若存在则直接返还true 
     * @since 1.0.0 
     */  
    public static boolean createDir(File dir){  
        synchronized (LOCK) {  
            if(!dir.exists()){  
                return dir.mkdirs();  
            }  
            return true;  
        }  
    }  
      
      
    /** 
     * 获取FileInputStream实例  
     * @since 1.0.0 
     */  
    public static FileInputStream getFileInputStream(String pathname){  
        return getFileInputStream(new File(pathname));  
    }  
      
    /** 
     *

获取FileInputStream实例

 
     * @since 1.0.0 
     */  
    public static FileInputStream getFileInputStream(File file){  
        try {  
            return new FileInputStream(file);  
        } catch (FileNotFoundException e) {  
            throw new ExecutetimeException(e);  
        }  
    }  
      
    /** 
     *

获取FileOutputStream实例

 
     * @since 1.0.0 
     */  
    public static FileOutputStream getFileOutputStream(String pathname){  
        return getFileOutputStream(new File(pathname), false);  
    }  
      
    /** 
     *

获取FileOutputStream实例

 
     * @since 1.0.0 
     */  
    public static FileOutputStream getFileOutputStream(String pathname, boolean append){  
        return getFileOutputStream(new File(pathname), append);  
    }  
      
    /** 
     *

获取FileOutputStream实例

 
     * @since 1.0.0 
     */  
    public static FileOutputStream getFileOutputStream(File file){  
        return getFileOutputStream(file, false);  
    }  
      
    /** 
     *

获取FileOutputStream实例

 
     * @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 list, File file, String filter){  
        if(filter == null){  
            list.add(file);  
        }else if(file.getAbsolutePath().toLowerCase().endsWith(filter)){  
            list.add(file);  
        }  
    }  
      
}  

你可能感兴趣的:(java基础)