2---File练习题

2— File

File file = new File(“文件或文件夹的路径”);

C:\\itheima\\a.txt反斜杠 \n \t … 第一个\ 是转义字符,第二个 \ 才是真正的反斜杠

  • 打印时只有一个 \
  • 在字符串中写 \ 时,需要写两个

/ 斜杠

C:/itheima/a.txt

路径

  • 绝对路径 - 就是一个完整的路径,以盘符开始
  • 相对路径 - 就是省略了路径的前半部分,默认项目的路径作为前半部分,可以省略
  • 如果文件不在项目内,只能使用绝对路径

创建

  • createNewFile() - 创建文件
  • mkdir() 创建单层文件夹
  • mkdirs() 创建多层文件夹

删除

  • delete 删除文件、删除空文件夹,很危险!!!

判断存在

  • exists

判断类型

  • isFile
  • isDirectory

获取子目录和子文件

  • listFiles

获取文件或文件夹的名字

  • getName()
练习1
需求:统计当前模块下 java文件的个数  txt文件的个数 等, 并打印到控制台
public class TestCount {
    public static void main(String[] args) {
        File file = new File("day15");
        HashMap<String, Integer> map = new HashMap<>();
        getCount(map, file);
        System.out.println(map);
    }
    private static void getCount(HashMap<String, Integer> map, File dir) {
        File[] files = dir.listFiles(); // 得到当前文件夹下所有内容
        for (File f : files) {
            if (f.isFile()) {
                String key = getExt(f.getName()); // 得到后缀名
                Integer count = map.get(key);
                if (count == null) {
                    map.put(key, 1);
                } else {
                    map.put(key, count + 1);
                }
            }
            else {
                getCount(map, f); // 是文件夹,再次递归
            }
        }
    }

    private static String getExt(String fileName) {
        String[] split = fileName.split("\\."); // 1.txt
        return split[1];
    }
    /*private static String getExt(String fileName) {
        int index = fileName.lastIndexOf("."); // 从后向前找
        return fileName.substring(index + 1);
    }*/
}
练习2 
需求:
完成递归遍历文件夹,显示某个文件夹下所有内容

- 显示文件夹下所有 *.java 的文件
- 显示文件夹下所有 以 Test 开头的文件
- 显示文件夹时加上缩进效果(选做),例如:
|- 第一层1
|- 第一层2
	|- 第二层1
	|- 第二层2
		|- 第三层1
		...
|- 第一层3
	|- 第二层3
		|- 第三层2
		...
//第一问
public class TestDir {
    public static void main(String[] args) {
        // . 代表当前项目下所有文件, 可以替换为具体模块名
        recursive(new File("."), 0);
    }

    // 递归遍历文件夹和文件
    public static void recursive(File dir, int n) {
        File[] files = dir.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                if (f.getName().endsWith(".java")) {
                    tab(n);
                    System.out.println(f.getName());
                }
            } else {
                tab(n);
                System.out.println(f.getName());
                recursive(f, n + 1);
            }
        }
    }

    // 添加缩进和 |- 符号
    private static void tab(int n) {
        for (int i = 0; i < n; i++) {
            System.out.print("\t");
        }
        System.out.print("|- ");
    }
}
//第二问
public class TestDir {
    public static void main(String[] args) {
        // . 代表当前项目下所有文件, 可以替换为具体模块名
        recursive(new File("."), 0);
    }

    // 递归遍历文件夹和文件
    public static void recursive(File dir, int n) {
        File[] files = dir.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                if (f.getName().startsWith("Test")) {
                    tab(n);
                    System.out.println(f.getName());
                }
            } else {
                tab(n);
                System.out.println(f.getName());
                recursive(f, n + 1);
            }
        }
    }

    // 添加缩进和 |- 符号
    private static void tab(int n) {
        for (int i = 0; i < n; i++) {
            System.out.print("\t");
        }
        System.out.print("|- ");
    }
}
练习3
需求:
尝试完成文件夹拷贝,包括其子目录和文件
public class TestCopy {
    public static void main(String[] args) throws IOException {
        File source = new File("day15");
        File target = new File("e:/day15");
        recursive(source, target);
    }

    // 递归遍历文件夹和文件
    public static void recursive(File source, File target) throws IOException {        
        String parentS = source.getAbsolutePath(); // 源父文件夹
        String parentT = target.getAbsolutePath(); // 目标父文件夹
        File[] files = source.listFiles();
        // 创建【目标文件夹】
        for (File f : files) {
            if (f.isDirectory()) {                
                String targetPath = f.getAbsolutePath().replace(parentS, parentT); // 目标路径
                File tf = new File(targetPath);
                tf.mkdirs();
                recursive(f, tf);
            }
        }
        // 拷贝【源文件】到【目标文件】
        for (File f : files) {
            if (f.isFile()) {                
                String sourcePath = f.getAbsolutePath(); // 源路径
                String targetPath = sourcePath.replace(parentS, parentT); // 目标路径
                Files.copy(Paths.get(sourcePath), Paths.get(targetPath));
            }
        }
    }
}

小编觉得,知识点稍微概括一下就好了,还是习题重要一点,建议先复制需求独立完成,不足之处 ,请多指正。多提宝贵意见,谢谢大家

你可能感兴趣的:(File,java)