FileUtil

来源:互联网 发布:centos 局域网断网 编辑:程序博客网 时间:2024/06/04 18:25
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Date;/** * 功能:该类用于操作文件和文件夹   * */public class FileUtil {  /**     *      * @param targetFile 被操作的文件     * @param keValue @param keValue 键值对,键代表要被替换掉的文件中的文本,值代表要替换成什么值     */    public static void replaceText(File targetFile,Map keValue){        if(targetFile==null||keValue==null||keValue.entrySet().size()==0) return;        StringBuffer contentBuffer=readFileContent(targetFile);        replaceAll(contentBuffer, keValue);        writeContentToFile(contentBuffer.toString(),targetFile);    }        /**     * @param keValue @param keValue 键值对,键代表要被替换掉的的文本,值代表要替换成什么值     */    public static void replaceAll(StringBuffer targetBuffer,Map keValue){        if(targetBuffer==null||targetBuffer.length()==0) return;        Iterator iterator=keValue.entrySet().iterator();        while(iterator.hasNext()){            Map.Entry entry=(Map.Entry)iterator.next();            String targetTex=(String)entry.getKey();            String replaceText=(String)entry.getValue();            if(targetTex.equals(replaceText)) continue;//替换文本和被替换文本相同,无需替换            if(targetTex!=null&&targetTex.length()!=0){                int start=targetBuffer.indexOf(targetTex);                while(start!=-1){                    targetBuffer.replace(start, start+targetTex.length(), replaceText);                    start=targetBuffer.indexOf(targetTex,start+replaceText.length());//查找下一处                }            }        }            }        /**     *      * @param targetBuffer     * @param keValue     * @return false 没有可替换的元素,true 替换成功     */    public static boolean replaceFirstMatch(StringBuffer targetBuffer,String targetTex,String replaceText,int begin,int end){        if(targetBuffer==null||targetBuffer.length()==0) return false;        if(targetTex.equals(replaceText)) return false;//替换文本和被替换文本相同,无需替换        if(targetTex!=null&&targetTex.length()!=0){                targetBuffer.replace(begin,end, replaceText);                return true;        }        return false;    }                    /**     *      * @param targetFile 目标文件     * @return 读取的文件内容     */    public static StringBuffer readFileContent(File targetFile){        StringBuffer contentBuffer = new StringBuffer();        String line = null;        BufferedReader reader = null;        try {            //Linux系统            reader = new BufferedReader(new InputStreamReader(new FileInputStream(targetFile),"UTF-8"));            //Windows系统            //reader = new BufferedReader(new InputStreamReader(new FileInputStream(targetFile),"gb2312"));            //reader = new BufferedReader(new FileReader(targetFile));            while ((line = reader.readLine()) != null) {                contentBuffer.append(line + "\n");            }        } catch (FileNotFoundException e) {            e.printStackTrace();            throw new RuntimeException("没有找到文件,请检查文件路径是否正确!");        } catch (IOException e) {            e.printStackTrace();            throw new RuntimeException("读取文件的过程中发生了IOException!");        }finally{            try {                if(reader!=null) reader.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return contentBuffer;    }        public static void writeContentToFile(String content,File targetFile){        BufferedWriter writer = null;        try {            //writer = new BufferedWriter(new FileWriter(targetFile));                        //Linux系统            OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(targetFile),"UTF-8");            //Windows系统            //OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(targetFile),"gb2312");                                writer=new BufferedWriter(write);              writer.write(content);            writer.close();        } catch (IOException e) {            e.printStackTrace();            throw new RuntimeException("写文件的过程中发生了IOException!");        }finally{            try {                if(writer!=null) writer.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }     /**     * 将源文件的数据写入到目标文件中,     * 不会检查源文件是否存在,     * 若目标文件存在则直接写入,     * 否则创建目标文件后再进行写入。     * @param srcPath     * @param desPath     */    private static void copyFile(String srcPath,String desPath){        try {            FileInputStream in = new FileInputStream(srcPath);            FileOutputStream out = new FileOutputStream(desPath);            byte[] bt = new byte[1024];            int count;            while ((count = in.read(bt)) > 0) {                out.write(bt, 0, count);            }            in.close();            out.close();        } catch (IOException ex) {            ex.printStackTrace();        }            }        /**     * 复制文件,若文件存在则替换该文件。     * @param srcPath     * @param desPath     * @throws Exception     */    public static void copyAndReplaceFile(String srcPath,String desPath) throws Exception{        srcPath = separatorReplace(srcPath);        desPath = separatorReplace(desPath);        File srcFile = new File(srcPath);        if(!srcFile.isFile()){            throw new Exception("source file not found!");        }        copyFile(srcPath,desPath);    }        /**     * 复制文件,若文件已存在则不进行替换。     * @param srcPath     * @param desPath     * @throws Exception     */    public static void copyAndNotReplaceFile(String srcPath,String desPath) throws Exception{        srcPath = separatorReplace(srcPath);        desPath = separatorReplace(desPath);        File srcFile = new File(srcPath);        File desFile = new File(desPath);        if(!srcFile.isFile()){            throw new Exception("source file not found!");        }        if(desFile.isFile()){            return;        }        copyFile(srcPath,desPath);    }        /**     * 移动文件,若文件存在则替换该文件。     * @param srcPath     * @param desPath     * @throws Exception     */    public static void moveAndReplaceFile(String srcPath,String desPath) throws Exception{        srcPath = separatorReplace(srcPath);        desPath = separatorReplace(desPath);        copyAndReplaceFile(srcPath,desPath);        deleteFile(srcPath);    }        /**     * 移动文件,若文件存在则不进行替换。     * @param srcPath     * @param desPath     * @throws Exception     */    public static void moveAndNotReplaceFile(String srcPath,String desPath) throws Exception{        srcPath = separatorReplace(srcPath);        desPath = separatorReplace(desPath);        copyAndNotReplaceFile(srcPath,desPath);        deleteFile(srcPath);    }        /**     * 复制并合并文件夹,     * 不会替换目标文件夹中已经存在的文件或文件夹。     * @param srcPath     * @param desPath     * @throws Exception     */    public static void copyAndMergerFolder(String srcPath,String desPath) throws Exception{                srcPath = separatorReplace(srcPath);        desPath = separatorReplace(desPath);        File folder = getFolder(srcPath);        createFolder(desPath);        File[] files = folder.listFiles();        for(File file:files){            String src = file.getAbsolutePath();            String des = desPath+File.separator+file.getName();            if(file.isFile()){                copyAndNotReplaceFile(src,des);            }else if(file.isDirectory()){                copyAndMergerFolder(src,des);            }        }    }        /**     * 复制并替换文件夹,     * 将目标文件夹完全替换成源文件夹,     * 目标文件夹原有的资料会丢失。     * @param srcPath     * @param desPath     * @throws Exception     */    public static void copyAndReplaceFolder(String srcPath,String desPath) throws Exception{           srcPath = separatorReplace(srcPath);        desPath = separatorReplace(desPath);        File folder = getFolder(srcPath);        createNewFolder(desPath);        File[] files = folder.listFiles();        for(File file:files){            String src = file.getAbsolutePath();            String des = desPath+File.separator+file.getName();            if(file.isFile()){                copyAndReplaceFile(src,des);            }else if(file.isDirectory()){                copyAndReplaceFolder(src,des);            }        }    }        /**     * 合并文件夹后,将源文件夹删除。     * @param srcPath     * @param desPath     * @throws Exception     */    public static void moveAndMergerFolder(String srcPath,String desPath) throws Exception{        srcPath = separatorReplace(srcPath);        desPath = separatorReplace(desPath);                copyAndMergerFolder(srcPath,desPath);        deleteFolder(srcPath);    }        /**     * 替换文件夹后,将源文件夹删除。     * @param srcPath     * @param desPath     * @throws Exception     */    public static void moveAndReplaceFolder(String srcPath,String desPath) throws Exception{        srcPath = separatorReplace(srcPath);        desPath = separatorReplace(desPath);        copyAndReplaceFolder(srcPath,desPath);        deleteFolder(srcPath);    }        /**     * 创建文件夹,如果文件夹存在则不进行创建。     * @param path     * @throws Exception     */    public static void createFolder(String path) throws Exception{        path = separatorReplace(path);        File folder = new File(path);        if(folder.isDirectory()){            return;        }else if(folder.isFile()){            deleteFile(path);        }        folder.mkdirs();    }        /**     * 创建一个新的文件夹,如果文件夹存在,则删除后再创建。     * @param path     * @throws Exception     */    public static void createNewFolder(String path) throws Exception{        path = separatorReplace(path);        File folder = new File(path);        if(folder.isDirectory()){            deleteFolder(path);        }else if(folder.isFile()){            deleteFile(path);        }        folder.mkdirs();    }        /**     * 创建一个文件,如果文件存在则不进行创建。     * @param path     * @throws Exception     */    public static File createFile(String path) throws Exception{        path = separatorReplace(path);        File file = new File(path);        if(file.isFile()){            return file;        }else if(file.isDirectory()){            deleteFolder(path);        }        return createFile(file);    }        /**     * 创建一个新文件,如果存在同名的文件或文件夹将会删除该文件或文件夹,     * 如果父目录不存在则创建父目录。     * @param path     * @throws Exception     */    public static File createNewFile(String path) throws Exception{        path = separatorReplace(path);        File file = new File(path);        if(file.isFile()){            deleteFile(path);        }else if(file.isDirectory()){            deleteFolder(path);        }        return createFile(file);    }        /**     * 分隔符替换     * window下测试通过     * @param path     * @return     */    public static String separatorReplace(String path){        return path.replace("\\","/");    }        /**     * 创建文件及其父目录。     * @param file     * @throws Exception     */    public static File createFile(File file) throws Exception{        createParentFolder(file);        if(!file.createNewFile()) {            throw new Exception("create file failure!");        }        return file;    }        /**     * 创建父目录     * @param file     * @throws Exception     */    private static void createParentFolder(File file) throws Exception{        if(!file.getParentFile().exists()) {            if(!file.getParentFile().mkdirs()) {                throw new Exception("create parent directory failure!");            }        }    }        /**     * 根据文件路径删除文件,如果路径指向的文件不存在或删除失败则抛出异常。     * @param path     * @return     * @throws Exception     */    public static void deleteFile(String path) throws Exception {        path = separatorReplace(path);        File file = getFile(path);            if(!file.delete()){            throw new Exception("delete file failure");        }                          }        /**     * 删除指定目录中指定前缀和后缀的文件。     * @param dir     * @param prefix     * @param suffix     * @throws Exception     */    public static void deleteFile(String dir,String prefix,String suffix) throws Exception{             dir = separatorReplace(dir);        File directory = getFolder(dir);        File[] files = directory.listFiles();        for(File file:files){            if(file.isFile()){                String fileName = file.getName();                if(fileName.startsWith(prefix)&&fileName.endsWith(suffix)){                    deleteFile(file.getAbsolutePath());                }            }        }        }        /**     * 根据路径删除文件夹,如果路径指向的目录不存在则抛出异常,     * 若存在则先遍历删除子项目后再删除文件夹本身。     * @param path     * @throws Exception     */    public static void deleteFolder(String path) throws Exception {        path = separatorReplace(path);        File folder = getFolder(path);        File[] files = folder.listFiles();        for(File file:files) {                            if(file.isDirectory()){                deleteFolder(file.getAbsolutePath());            }else if(file.isFile()){                                    deleteFile(file.getAbsolutePath());                                                }        }          folder.delete();    }        /**     * 查找目标文件夹下的目标文件     * @param dir     * @param fileName     * @return     * @throws FileNotFoundException     */    public static File searchFile(String dir,String fileName) throws FileNotFoundException{        dir = separatorReplace(dir);        File f = null;        File folder = getFolder(dir);        File[] files = folder.listFiles();        for(File file:files) {                            if(file.isDirectory()){                f =  searchFile(file.getAbsolutePath(),fileName);                if(f!=null){                    break;                }            }else if(file.isFile()){                if(file.getName().equals(fileName)){                    f = file;                    break;                }                                                                        }        }                  return f;    }              /**     * 获得文件类型。     * @param path:文件路径     * @return     * @throws FileNotFoundException     */    public static String getFileType(String path) throws FileNotFoundException {        path = separatorReplace(path);        File file = getFile(path);        String fileName = file.getName();        String[] strs = fileName.split("\\.");        if(strs.length<2){            return "unknownType";        }        return strs[strs.length-1];    }        /**     * 根据文件路径,获得该路径指向的文件的大小。     * @param path     * @return     * @throws FileNotFoundException     */    public static long getFileSize(String path) throws FileNotFoundException{        path = separatorReplace(path);                File file = getFile(path);        return file.length();    }        /**     * 根据文件夹路径,获得该路径指向的文件夹的大小。     * 遍历该文件夹及其子目录的文件,将这些文件的大小进行累加,得出的就是文件夹的大小。     * @param path     * @return     * @throws FileNotFoundException     */    public static long getFolderSize(String path) throws FileNotFoundException{        path = separatorReplace(path);                        long size = 0;        File folder = getFolder(path);        File[] files = folder.listFiles();        for(File file:files){            if(file.isDirectory()){                size += getFolderSize(file.getAbsolutePath());            }else if(file.isFile()){                size += file.length();            }        }        return size;    }        /**     * 通过路径获得文件,     * 若不存在则抛异常,     * 若存在则返回该文件。     * @param path     * @return     * @throws FileNotFoundException     */    public static File getFile(String path) throws FileNotFoundException{        path = separatorReplace(path);                        File file = new File(path);        if(!file.isFile()){            throw new FileNotFoundException("file not found!");        }        return file;    }        /**     * 通过路径获得文件夹,     * 若不存在则抛异常,     * 若存在则返回该文件夹。     * @param path     * @return     * @throws FileNotFoundException     */    public static File getFolder(String path) throws FileNotFoundException{        path = separatorReplace(path);                        File folder = new File(path);        if(!folder.isDirectory()){            throw new FileNotFoundException("folder not found!");        }        return folder;    }        /**     * 获得文件最后更改时间。     * @param path     * @return     * @throws FileNotFoundException     */    public static Date getFileLastModified(String path) throws FileNotFoundException{        path = separatorReplace(path);                        File file = getFile(path);        return new Date(file.lastModified());    }        /**     * 获得文件夹最后更改时间。     * @param path     * @return     * @throws FileNotFoundException     */    public static Date getFolderLastModified(String path) throws FileNotFoundException{        path = separatorReplace(path);                File folder = getFolder(path);        return new Date(folder.lastModified());    } 
    public static void main(String[]args){        File targetFile=new File("d:/11.xml");//        Map keyValue=new HashMap();//        keyValue.put("aaa", "bbb");//        replaceText(targetFile, keyValue);        writeContentToFile("123",targetFile);    }


 }


0 0
原创粉丝点击