Day11 JaseSE File类的使用

JavaSE File类的使用

  • Java.io.File类:文件和目录路径名的抽象表示形式,与平台无关

  • File能新建、删除、重命名文件和目录,但是不能访问文件内容本身。(需要使用输入/输出流)

  • File对象可以作为参数传递给流的构造函数

  • File类的构造方法:

    • public File(String pathname)
    • public File(String parent, String child)

File类代表与平台无关的文件和目录。

1 常用方法

  • 访问文件名:

    函数名称 函数功能
    getname() 获取文件名称
    getPath() 获取文件路径
    getAbsolutePath() 获取绝对路径,会相对补齐
    getAbsoluteFile() 返回一个用当前文件的绝对路径构建的file对象
    getParent() 获取文件/文件夹的父类路径
    renameTo(File) 使用file对象给文件/文件夹重命名

    案例展示:

    package com.io;
    //访问文件名案例
    import java.io.File;
    import java.util.zip.GZIPOutputStream;
    
    public class Test1 {
        public static void main(String[] args) {
            File f = new File("/Users/demut/Documents/File/tt.txt");//此时f为tt.txt文件
            File fp = new File("/Users/demut/Documents/File");//此fp为目录
    //        File f1 = new File("/Users/demut/","/Documents/File/tt.txt");//使用相对较少
    //        File f2 = new File("/Users"+File.separator+"/demut/Documents/File/tt.txt");//也可以
          
            System.out.println(f.getName());//获取文件名称
            System.out.println(fp.getName());//获取文件夹名称
    
            File f3 = new File("src/com/io/Test1.java");//此时使用相对路径创建file对象
    
            System.out.println(f.getPath());//获取文件路径
            System.out.println(f3.getAbsolutePath());//获取绝对路径,会自动补齐
    
            System.out.println(f3.getAbsoluteFile()); //返回一个用当前文件的绝对路径构建的file对象
    
            System.out.println(f3.getParent());//返回当前文件或文件夹的父级路径
    
            f.renameTo(new File("/Users/demut/Documents/File/ttt.txt"));//给文件或文件夹重命名
        }
    }
    /*运行结果:
    tt.txt
    File
    /Users/demut/Documents/File/tt.txt
    /Users/demut/JAVASE Project/JavaSE/src/com/io/Test1.java
    /Users/demut/JAVASE Project/JavaSE/src/com/io/Test1.java
    src/com/io
    */
    
  • 文件检测:

    函数名称 函数功能
    exists() 判断文件/文件夹是否存在
    canWrite() 判断文件是否可写
    canRead() 判断文件是否可读
    isFile() 判断file对象是否为文件
    isDirectory() 判断file对象是否为路径
    lastModified() 获取文件最后修改时间,返回一个毫秒数
    length() 获取文件长度–>字节数

    案例展示:

    package com.io;
    
    import java.io.File;
    
    //文件检测
    public class Test2 {
        public static void main(String[] args) {
            File file = new File("/Users/demut/Documents/File/ttt.txt");
            System.out.println(file.exists()); //判断文件或文件夹是否存在
    
            System.out.println(file.canWrite()); //判断文件是否可写
            System.out.println(file.canRead()); //判断文件是否可读
    
            System.out.println(file.isFile()); //判断file是否为文件
            System.out.println(file.isDirectory()); //判断file是否为路径
    
            System.out.println(file.lastModified());//获取文件的最后修改时间,返回的是一个毫秒数
            System.out.println(file.length()); //获取文件长度-->字节数
        }
    }
    /*运行结果:
    true
    true
    true
    true
    false
    1583560929000
    0
    */
    
  • 文件操作和目录操作:

    函数名称 函数功能
    createNewFile() 创建文件(需要捕获异常)
    mkdir() 创建单层目录
    mkdirs() 创建多层目录
    delete() 删除文件/文件夹
    list() 返回当前文件夹的子集名称,包括目录和文件(String类型)
    listFiles() 返回当前文件夹的子集的file对象,包括目录和文件(File类型)

    案例展示:

    package com.io;
    
    import java.io.File;
    import java.io.IOException;
    
    //文件操作和目录操作
    public class Test3 {
        public static void main(String[] args) {
            File file = new File("/Users/demut/Documents/File/tt2.txt");
            if (!file.exists()){
                try {
                    file.createNewFile(); // 创建文件
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //file.delete(); //删除文件
    
            File file1 = new File("/Users/demut/Documents/File/aaa/bbb/ccc");
            //file1.mkdir(); //创建单层目录
            file1.mkdirs(); //创建多层目录
    
            File file2 = new File("/Users/demut/Documents/File");
    
            String[] fl = file2.list(); //返回当前文件夹的子集的名称,包括目录和文件
            for (String s : fl){
                System.out.println(s);
            }
    
            File[] fs = file2.listFiles(); //返回当前文件夹的子集的file对象,包括目录和文件
            for (File ff : fs) {
                System.out.println(ff);
            }
        }
    }
    /*运行结果:
    tt2.txt
    .DS_Store
    ttt.txt
    aaa
    /Users/demut/Documents/File/tt2.txt
    /Users/demut/Documents/File/.DS_Store
    /Users/demut/Documents/File/ttt.txt
    /Users/demut/Documents/File/aaa
    */
    

2 递归遍历文件需求

现在需要遍历Targetu文件夹,返回该文件夹下的所有目录和文件,不论层次。

  • 使用非递归,代码量冗杂,且重复很多。
  • 使用递归,很简洁。

代码展示:

package com.io;

import java.io.File;

public class Demo01 {
    public static void main(String[] args) {
        File file = new File("/Users/demut/Desktop/Targetu");
        new Demo01().test(file);
    }

    //递归遍历文件
    public void test(File file){
        if (file.isFile()){
            System.out.println(file.getAbsolutePath()+"是文件");
        }else {
            System.out.println(file.getAbsolutePath()+"是文件夹");
            //若为文件夹,则文件夹内可能有子文件夹或文件
            File[] fs = file.listFiles();//获取当前文件夹下的子文件夹或者文件的file对象
            if (fs != null && fs.length > 0){
                for(File ff : fs){
                    test(ff); //此处使用递归代替了以下代码
//                    if (ff.isFile()){
//                        System.out.println(file.getAbsolutePath()+"是文件");
//                    }else {
//                        System.out.println(file.getAbsolutePath()+"是文件夹");
//                        File[] fs1 = ff.listFiles();
//                        if (fs1 != null && fs1.length > 0){
//                            for (File ff1 : fs1){
//                                //......    //始终在重复
//                            }
//                        }
//                    }
                }
            }

        }
    }
}
//运行结果可自行调试

写在最后

骄傲在败坏以先,狂心在跌倒之前!

To Demut!

发布了32 篇原创文章 · 获赞 39 · 访问量 1734

猜你喜欢

转载自blog.csdn.net/qq_44958172/article/details/104742384