目录,文件的创建,修改,重命名,删除操作

目录,文件的创建,修改,重命名,删除操作


  • 掌握基本的文件和目录的创建,删除,重命名的操作

package File;

import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;

public class file {

    //把根目录和Scanner定义为静态变量,方便全局使用
    private static final String root = "." + File.separator;
    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        File dir = creatDirs();
        File newDir = renameDir(dir);
        if (newDir == null) return;
        String fileName = createFiles(newDir);
        String fileNameNew = renameFile(newDir, fileName);
        //deleteFiles(newDir, fileNameNew);
        deleteDir(newDir);
    }

    /**
     * 删除文件及当前文件夹
     *
     * @param newDir 给定要删除的目录
     */
    private static void deleteDir(File newDir) {
        System.out.println("删除文件夹?");

        boolean isdelete = scanner.nextBoolean();

        while (isdelete) {

            //把newDir以文件列表的形式储存在定义为File数组格式的list中,方便使用foreach进行遍历
            File[] list = newDir.listFiles();

            for (File file :
                    list) {
                //如果file文件下仍有文件,即为目录。采用递归,直到找到单一文件,进行删除操作
                //逐级返回,删除
                if (file.isDirectory()) {
                    deleteDir(file);
                }
                System.out.println("删除文件夹:" + file.delete());
            }
            //最后删除文件夹,跳出循环
            newDir.delete();
            break;
        }
    }

    /**
     * 重命名文件
     *
     * @param newDir   要修改名字的文件夹
     * @param fileName 原文件名
     * @return 新文件名
     */
    private static String renameFile(File newDir, String fileName) {
        System.out.println("请输入新的文件名的前缀:");
        String fileNameNew = scanner.nextLine().trim();

        for (int i = 0; i < 20; i++) {
            File f = new File(newDir, fileName + i + ".txt");
            File fn = new File(newDir, fileNameNew + i + ".txt");

            System.out.println("重命名文件" + f.getName() + ":" + f.renameTo(fn));
        }
        return fileNameNew;
    }

    /**
     * 创建文件
     *
     * @param newDir 目录
     * @return 文件
     * @throws IOException IO异常
     */
    private static String createFiles(File newDir) throws IOException {
        System.out.println("请输入文件名的前缀");
        String fileName = scanner.nextLine().trim();

        for (int i = 0; i < 20; i++) {
            File f = new File(newDir, fileName + i + ".txt");
            System.out.println("创建文件" + f.getName() + f.createNewFile());
        }
        return fileName;
    }

    /*
    0private static void deleteFiles(File newDir, String fileNameNew) {
        System.out.println("删除文件?");

        boolean deleteFile = scanner.nextBoolean();

        if (deleteFile) {
            for (int i = 0; i < 20; i++) {
                File fn = new File(newDir, fileNameNew + i + ".txt");
                System.out.println("删除文件" + fn.delete());
            }
        }
    }

     */

    /**
     * 重命名文件夹
     *
     * @param dir 文件夹名字
     * @return 新的目录
     */
    private static File renameDir(File dir) {
        System.out.println("请输入新的文件夹的名字");
        String newDirName = scanner.nextLine().trim();

        File newDir = new File(dir.getParentFile(), newDirName);
        boolean renameSuccess = dir.renameTo(newDir);

        if (renameSuccess) {
            System.out.println("修改成功");
        } else {
            System.out.println("修改失败");
            return null;
        }

        return newDir;

    }

    /**
     * 创建多级目录
     *
     * @return 文件
     */
    private static File creatDirs() {
        List<String> list = new ArrayList<>();
        while (true) {
            System.out.println("请输入文件路径,如果为空则结束");
            String path = scanner.nextLine();
            if (path.isBlank()) {
                break;
            }
            list.add(path);
        }
        //new新数组是为了使其成员为String类型
        return creatDir(list.toArray(new String[0]));
    }

    /**
     * 创建单级目录
     *
     * @param restPath 需要处理的目录路径
     * @return 返回目录
     */
    private static File creatDir(String... restPath) {
        String rest = joinRestDir(restPath);
        System.out.println("将在" + root + "下创建" + rest);
        File dir = new File(root, rest);
        if (dir.exists() && dir.isDirectory()) {
            System.out.println("文件夹已经存在" + dir.toString());
            return dir;
        } else {
            boolean creatSuccess = dir.mkdirs();
            if (creatSuccess) {
                System.out.println("创建成功");
                return dir;
            } else {
                throw new IllegalArgumentException("无法在" + root + "下创建" + rest);
            }
        }
    }

    /**
     * 加入剩余目录
     *
     * @param restPath 需要加入的剩余目录
     * @return 返回加上剩余目录的目录
     */
    private static String joinRestDir(String... restPath) {
        //Arrays为数组的方法,类名调用stream方法,将restPath转化为流文件使用map(非集合方法map)方法,
        // 最后使用collect将流文件通过Collectors.joining加入分割,最后收集到一个字符串中
        return Arrays.stream(restPath).map(String::trim).collect(Collectors.joining(File.separator));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值