Java中有关文件基本操作的总结

文件操作常用方法:

 //注:在使用中为了我们程序的可移植性和健壮性,建议使用 这个常量
        System.out.println(File.separator);    //打印结果  \

        /**
         * 1:创建一个新的文件夹(包括创建多层目录文件夹)
         * boolean mkdir()  创建此抽象路径名指定的目录。
         * boolean mkdirs()  创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
         */
        String folderName1 = "E:" + File.separator + "/firstFolder1";
        String folderName2 = "E:" + File.separator + "/firstFolder2/test/hello";
        File file1 = new File(folderName1);
        file1.mkdir(); //创建文件夹 在E:/firstFolder1
        File file2 = new File(folderName2);    //创建文件夹 在/firstFolder2/test/hello
        file2.mkdirs();


        /**
         * 2:创建一个新的文件
         */
        String fileName = "E:" + File.separator + "/firstFile.txt";
        File file = new File(fileName);
        try {
            file.createNewFile();
        } catch (Exception e) {
            e.printStackTrace();
        }


        /**
         * 3:删除一个文件夹或文件
         */
        String folderName = "E:" + File.separator + "/firstFolder1";
        File file = new File(folderName);
        if (file.exists()) {
            file.delete();
        } else {
            System.out.println("文件夹不存在!");
        }


        /**
         * 4:列出指定目录的全部文件(包括隐藏文件)
         * 使用file.listFiles(),列出完整路径,返回的是File的数组
         */
        File file = new File("E:" + File.separator);
        File[] listFiles = file.listFiles();
        for (File file2 : listFiles) {
            System.out.println(file2);
        }

        /**
         * 5:判断是文件夹还是文件
         */
        String folderName = "E:" + File.separator + "/firstFolder1";
        String fileName = "E:" + File.separator + "/firstFile.txt";
        File f1 = new File(folderName);
        File f2 = new File(fileName);
        if (f1.isDirectory()) {
            System.out.println("is Directory");
        }
        if (f2.isFile()) {
            System.out.println("is File");
        }

        String path = "E:\\workspace";
        File file1 = new File(path);
        
        
        findAllFf(file1);
    }

    /**
     * 6:查找指定目录的文件夹和文件
     */
    public void findAllFf(File f) {
        if (f != null) {
            if (f.isDirectory()) {
                System.out.println(f);
                File[] listFiles = f.listFiles();
                for (File file : listFiles) {
                    findAllFf(file);//递归
                }
            } else {
                System.out.println(f);
            }
        }
    }
   /**
     * 7:文件移动
     */
    File newName = new File("E:\\zh\\zh1.txt");
    File oldName = new File("E:\\zh.txt");
    oldName.renameTo(newName);//E:\\zh.txt移动至E:\\zh\\zh1.txt

文件下载

 //浏览器强制下载,不需要指定路径。默认浏览器存储路径。
    @RequestMapping("upload")
    public void fileuplpad(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 设置浏览器强制下载
        response.setContentType("application/force-download");
        String fileName = URLEncoder.encode("需求列表", "UTF-8") + ".txt";
        // 设置文件名
        response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
        OutputStream fos = response.getOutputStream();

        File file = new File("E:\\java task\\zhl.txt");
        FileInputStream fis = new FileInputStream(file);

        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, len);
            System.out.println(len);
            System.out.println(new String(bytes));
        }
        fos.flush();//强制刷出
        //一般情况下是:先打开的后关闭,后打开的先关闭
        fos.close();
        fis.close();
    }

文件拷贝(工具类)

public class FileUtil {

    private static Logger logger = LoggerFactory.getLogger(FileUtil.class);

    //文件夹拷贝(参数文件夹路径---path)
    public static void copyDir(String srcPath, String destPath) {
        File srcFile = new File(srcPath);
        File destFile = new File(destPath);
        copyDir(srcFile, destFile);
    }

    //文件夹拷贝(参数文件夹---file)
    public static void copyDir(File srcFile, File destFile) {
        copyDirDetail(srcFile, destFile);
    }


    //拷贝文件夹细节
    public static void copyDirDetail(File srcFile, File destFile) {
        if (srcFile.isFile()) {   //文件直接复制
                FileUtil.copyFile(srcFile, destFile);
        } else if (srcFile.isDirectory()) {//目录
            destFile = new File(destFile, srcFile.getName());
            if(!destFile.isDirectory()){
                destFile.mkdirs();
            }
            //获取下一级目录|文件
            for (File sub : srcFile.listFiles()) {
                copyDirDetail(sub, destFile);
            }
        }
    }


    //文件拷贝(参数文件路径---path)
    public static void copyFile(String srcPath, String destPath){
        File srcFile = new File(srcPath);
        File destFile = new File(destPath);
        copyFile(srcFile, destFile);
    }

    //文件拷贝(参数文件---file)
    public static void copyFile(File srcFile, File destFile) {
            if (!srcFile.isFile()) {
                System.out.println("目标文件不存在");
                return;
            }
            if (!destFile.isDirectory()) {
                destFile.mkdirs();
            }

            destFile = new File(destFile, srcFile.getName());
        try {
            FileInputStream fis = new FileInputStream(srcFile);
            FileOutputStream fos = new FileOutputStream(destFile);
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, len);
            }
            fos.flush();//强制刷出,必须吗?close之前不是自动调用flush方法吗
            fos.close();
            fis.close();

             /*  FileReader fr = new FileReader(srcFile);
            FileWriter fw = new FileWriter(destFile);
            char[] chars = new char[1024];
            int len = 0;
            while((len = fr.read(chars)) !=-1){
                fw.write(chars,0,len);
            }
            fw.close();
            fr.close();*/

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("文件复制失败");
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值