美文网首页
Java - File类

Java - File类

作者: sunboximeng | 来源:发表于2018-06-09 09:40 被阅读0次

    Linux:一切皆文件
    Java:一切皆对象,因此文件也是对象。

    字符串(路径)就是File。因为其构造器的参数就是字符串,打印File的时候也是打印出文件路径。需要调用其getName方法才能只打印文件名(路径的最后一部分)。
    创建File实例,不等于创建了文件(夹)。类似于创建了线程对象不等于开启了线程。

    • 创建文件:createNewFile()
    • 创建文件夹:mkdir()、mkdirs()

    指定路径不存在会导致创建失败。但是mkdirs()可以创建多级目录,因此可以有不存在的部分。
    不指定路径就会使用使用相对路径,默认会在当前项目下创建文件。
    文件路径中的分隔符需要转义,因此有两个反斜杠。两个正斜杠就是——注释。

    不能依靠后缀名来区分文件和文件夹:

    • isFile()
    • isDirectory()

    查看文件夹里面的东西:

    • String[ ] list():只是获得字符串
    • File[ ] listFiles():获得File对象。可以空参,也可以传入筛选器FileFilter。

    利用 for循环+递归 遍历文件夹,实现各种功能:

    • 打印所有文件(包括子文件夹中的文件)
    • 获得文件夹的大小:length()
    • 复制文件夹:涉及IO流
    • 删除文件夹: delete()

    注意1: for循环+递归 的模式很像遍历一个N叉树、遍历Graph的代码。for循环中的集合就像是Graph中的临近节点集合。 对于二叉树而言,下面的节点少,所以不用临近节点集合,直接指针指过去。
    注意2:递归实现的关键点:1. 结构:if分支+自身调用。 2. 层数要尽可能小,2-3层即可(嵌套的自相似特性会自动保证递归算法可以scale)。

    利用字符串的replace方法去掉文件后缀名

    file.getName().replace(".java", "")
    

    利用 FileFilter 接口和字符串的 endsWith 方法筛选文件

     private static void printFile(File f) {
    
    
    //      相当于Graph中的获得临近点集合
            File[] files2 = f.listFiles((pathname) ->
    //          如果是文件夹或者文件名以特定字符结尾就返回true。
    //          由于if返回的是boolean,所以就可以直接与return合并。
                pathname.isDirectory() || 
                (pathname.isFile() && pathname.getName().endsWith(".java"))
            );
    
    //      for循环+递归实现遍历
            for (File file : files2) {
    
                if (file.isFile()) {
                    System.out.println(file.getName());
    
                } else {
                    printFile(file);
                }
    
            }
    
        }
    

    相关文章

      网友评论

          本文标题:Java - File类

          本文链接:https://www.haomeiwen.com/subject/vzzzsftx.html