文件操作工具类

package com.zhihua.file;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;

/**
 * 文件操作工具类
 * <请替换成功能描述> <br>
 * <请替换成详细描述>
 * @author caizh
 * @since [1.0.0]
 * @version [1.0.0,2017年2月6日]
 */
public class FileUtils {

    /**
     * 创建目录
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param dir 目录
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void mkdir(String dir){
        try{
            File dirPath = new File(dir);
            if(!dirPath.exists()){
                dirPath.mkdirs();
            }
        }catch(Exception e){
            System.out.println("创建目录操作失败!"+e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 新建文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param fileName 包含路径的文件名 如:E:\
     * @param content 文件内容
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void createNewFile(String fileName,String content){
        try{
            File filePath = new File(fileName);
            if(!filePath.exists()){
                filePath.createNewFile();
            }
            FileWriter fw = new FileWriter(filePath);
            PrintWriter pw = new PrintWriter(fw);
            pw.println(content);
            pw.flush();
            pw.close();
            fw.close();
        }catch(Exception e){
            System.out.println("新建文件操作出错!"+e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param fileName 完整路径的文件名
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月14日]
     */
    public static void listFile(String fileName){
        File file = new File(fileName);
        if(!file.exists()){
            System.out.println("文件不存在!");
        }else{
            if(file.isFile()){
                if(file.getName().toLowerCase().endsWith(".pdf")
                        || file.getName().toLowerCase().endsWith(".doc")
                        || file.getName().toLowerCase().endsWith(".chm")
                        || file.getName().toLowerCase().endsWith(".html")
                        || file.getName().toLowerCase().endsWith(".htm")
                        || file.getName().toLowerCase().endsWith(".ftl")){
                    //过滤文件格式
                    System.out.println(file);
                    System.out.println(file.getName());
                }
            }else{
                File[] files = file.listFiles();
                for (File f : files) {
                    System.out.println(f.getAbsolutePath());
                    listFile(f.getAbsolutePath());
                }
            }
        }
    }

    /**
     * 删除文件夹
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param folderPath 文件夹路径
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void delFolder(String folderPath){
        try{
            //删除文件夹里面所有内容
            delAllFile(folderPath);
            File filePath = new File(folderPath);
            //删除空文件夹
            filePath.delete();
        }catch(Exception e){
            System.out.println("删除文件夹操作出错!"+e.getMessage());
            e.printStackTrace();
        }
    }    

    /**
     * 删除文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param fileName 包含路径的文件名
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void delFile(String fileName){
        try{
            File delFile = new File(fileName);
            delFile.delete();
        }catch(Exception e){
            System.out.println("删除文件操作出错!"+e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 删除文件夹中的所有文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param path 文件夹路径
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void delAllFile(String path){
        File file = new File(path);
        if(!file.exists()){
            return;
        }
        if(!file.isDirectory()){
            return;
        }
        String[] childFiles = file.list();
        File tempFile = null;
        for(int i=0;i<childFiles.length;i++){
            //File.separator与系统有关的默认名称分隔符
            //在UNIX系统上,此字段的值为'/';在Microsoft Windows系统上,它为 '\'。
            if(path.endsWith(File.separator)){
                tempFile = new File(path+childFiles[i]);
            }else{
                tempFile = new File(path+File.separator+childFiles[i]);
            }
            if(tempFile.isFile()){
                tempFile.delete();
            }
            if(tempFile.isDirectory()){
                delAllFile(path+"/"+childFiles[i]);//先删除文件夹里面的文件
                delFolder(path+"/"+childFiles[i]);//再删除空文件夹
            }
        }
    }

    /**
     * 复制单个文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param sourceFile 包含路径的源文件
     * @param targetFile 目标文件目录,如果该目标目录不存在则自动创建
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void copyFile(String sourceFile,String targetFile){
        try{
            FileInputStream in = new FileInputStream(sourceFile);
            mkdir(targetFile);
            FileOutputStream out = new FileOutputStream(targetFile+"/"+new File(sourceFile).getName());
            int len;
            byte[] buffer = new byte[1024];
            while((len = in.read(buffer))!= -1){
                out.write(buffer,0,len);
            }
            out.flush();
            out.close();
            in.close();
        }catch(Exception e){
            System.out.println("复制文件操作出错!"+e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 复制文件夹
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param sourceFolder 源文件夹路径
     * @param newFolder 目标文件夹路径
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void copyFolder(String sourceFolder,String newFolder){
        try{
            //如果文件夹不存在,则新建文件夹
            mkdir(newFolder);
            File sourceFile = new File(sourceFolder);
            String[] files = sourceFile.list();
            if(files.length<=0){
                System.out.println("源文件夹为空!");
                return;
            }
            File tempFile = null;
            for(int i=0;i<files.length;i++){
                if(sourceFolder.endsWith(File.separator)){
                    tempFile = new File(sourceFolder+files[i]);
                }else{
                    tempFile = new File(sourceFolder+File.separator+files[i]);
                }
                if(tempFile.isFile()){
                    FileInputStream input = new FileInputStream(tempFile);
                    FileOutputStream output = new FileOutputStream(newFolder+"/"+((tempFile.getName()).toString()));
                    byte[] buffer = new byte[1024*2];
                    int len;
                    while((len=input.read(buffer))!= -1){
                        output.write(buffer,0,len);
                    }
                    output.flush();
                    output.close();
                    input.close();
                }
                if(tempFile.isDirectory()){
                    //如果是子文件夹
                    copyFolder(sourceFolder+"/"+files[i],newFolder+"/"+files[i]);
                }
            }
        }catch(Exception e){
            System.out.println("复制文件夹操作出错!"+e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 移动文件到指定目录
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param sourceFile 包含路径的文件名
     * @param targetFile 目标文件目录
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void moveFile(String sourceFile,String targetFile){
        copyFile(sourceFile, targetFile);
        delFile(sourceFile);
    }

    /**
     * 移动文件到指定目录,不会删除文件夹
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param sourceFolder 源文件目录
     * @param targetFolder 目标文件目录
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void moveFiles(String sourceFolder,String targetFolder){
        copyFolder(sourceFolder, targetFolder);
        delAllFile(sourceFolder);
    }

    /**
     * 移动文件到指定目录,会删除文件夹
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param sourceFolder 源文件目录
     * @param targetFolder 目标文件目录
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月5日]
     */
    public static void moveFolder(String sourceFolder,String targetFolder){
        copyFolder(sourceFolder, targetFolder);
        delFolder(sourceFolder);
    }

    /**
     * 读取数据
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param inStream 输入流
     * @param charsetName 字符格式
     * @return
     * @throws Exception
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    public static String readData(InputStream inStream,String charsetName)throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = -1;
        while((len = inStream.read(buffer))!=-1){
            outStream.write(buffer, 0, len);
        }
        byte[] data = outStream.toByteArray();
        outStream.close();
        inStream.close();
        return new String(data,charsetName);
    }

    /**
     * 一行一行读取文件,适合字符读取,若读取中文字符时会出现乱码
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @param path
     * @return
     * @throws Exception
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    public static Set<String> readFile(String path)throws Exception{
        Set<String> datas = new HashSet<String>();
        FileReader fr = new FileReader(path);
        BufferedReader br = new BufferedReader(fr);
        String line = null;
        while((line=br.readLine())!=null){
            datas.add(line);
        }
        br.close();
        fr.close();
        return datas;
    }
}

测试类:

package com.zhihua.file.test;

import org.junit.Test;

import com.zhihua.file.FileUtils;

public class FileUtilsTest {

    /**
     * 创建目录
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void mkdir(){
        FileUtils.mkdir("E:/mkdir/");
        System.out.println("创建目录成功!");
    }

    /**
     * 新建文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void createFile(){
        try{
            String content = "这是在新建文件的内容";
            String path = "E:/mkdir/createNewFile.xml";
            FileUtils.createNewFile(path, content);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 遍历文件夹下所有的文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月14日]
     */
    @Test
    public void listFile(){
        String fileName = "E:/mkdir";
        FileUtils.listFile(fileName);
    }

    /**
     * 删除文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void delFile(){
        String fileName = "E:/mkdir/createNewFile.xml";
        FileUtils.delFile(fileName);
        System.out.println("删除文件成功!");
    }

    /**
     * 删除文件夹
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void delFolder(){
        String folderName = "E:/mkdir/del";
        FileUtils.delFolder(folderName);
    }

    /**
     * 删除文件夹里面的所有文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void delAllFile(){
        String path = "E:/mkdir/del/";
        FileUtils.delAllFile(path);
    }

    /**
     * 复制文件
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void copyFile(){
        //获取文件源地址
        String sourceFile = "E:/mkdir/free.ftl";
        //获取文件目标目录
        String targetFile = "E:/mkdir/del/";
        if(sourceFile==null||"".equals(sourceFile)){
            System.out.println("源文件不存在!");
            return;
        }
        FileUtils.copyFile(sourceFile, targetFile);
    }

    /**
     * 复制文件夹
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void copyFolder(){
        //获取文件源目录
        String sourceFolder = "E:/mkdir/del/";
        //获取文件目标目录
        String targetFolder = "E:/mkdir/copy/";
        FileUtils.copyFolder(sourceFolder, targetFolder);
    }

    /**
     * 移动文件到指定目录
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void moveFile(){
        String sourceFile = "E:/mkdir/del/login.wav";
        String targetFile = "E:/mkdir/move/";
        FileUtils.moveFile(sourceFile, targetFile);
    }

    /**
     * 移动多个文件到指定目录,不会删除文件夹
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void moveFiles(){
        String sourceFolder = "E:/mkdir/copy/";
        String targetFolder = "E:/mkdirs/";
        FileUtils.moveFiles(sourceFolder, targetFolder);
    }

    /**
     * 移动整个目录中的所有文件,并删除该文件夹
     * <请替换成功能描述> <br>
     * <请替换成详细描述>
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月6日]
     */
    @Test
    public void moveFolder(){
        String sourceFolder = "E:/mkdirs/";
        String targetFolder = "E:/mkdir/copy/";
        FileUtils.moveFolder(sourceFolder, targetFolder);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值