java-API之File文件流

寵の児 提交于 2020-03-06 10:02:29

创建File对象

File(String pathname)  //通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

常用方法及其测试

                File file = new File("F:\\ioTest\\1.txt");  // 本地磁盘路径
        
        // 常见方法
        System.out.println( file.length() );  // 获取文件的字节量
        System.out.println( file.exists() );  // 判断文件是否存在
        System.out.println( file.isFile() );  // 判断资源是否存在
        System.out.println( file.isDirectory() );  // 判断资源是否是文件夹
        System.out.println( file.getName() );  // 获取文件名
        System.out.println( file.getParent() ); // 获取父目录
        System.out.println( file.getAbsolutePath() );  // 获取 当前文件的绝对路径(全路径)
        
        System.out.println();
        
        file = new File("F:\\ioTest\\2.txt");
                // 没有了创建返回true,有了不创建返回false
        System.out.println( file.createNewFile() ); // 判断有没有新建成功
        file = new File("F:\\ioTest\\x\\y\\z");
        System.out.println( file.mkdirs() );  // 创建不存在的多级目录
        
        file = new File("F:\\ioTest\\xy");
        System.out.println( file.mkdir() ); // 创建一级不存在的目录
        System.out.println( file.delete() ); // 删除文件 或者 空白的文件夹
//      
        file = new File("F:\\ioTest\\a");
        String[] str2 = file.list() ;  // 列出文件夹下面所有的资源
//      [1.png, 1.txt, 2.txt],数组里放的是文件名称
        System.out.println(Arrays.toString(str2));
        
//      File[] listFiles() 
//              返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
        File[] files = file.listFiles();
        System.out.println(Arrays.toString(files));
//      System.out.println( file.listFiles() );
        

常用方法应用

递归求目录总大小

所谓递归,就是自己调用自己的一种方式。

    import java.io.File;
    import java.util.Scanner;

    // 该类 测试 递归求目录总大小
    public class Test3_Size {

    public static void main(String[] args) {
        // 1.接收用户输入的目录
        String path = new Scanner(System.in).nextLine();
        File dir = new File(path);
        
//      2.调用size()总大小
        long sum = size(dir);
        System.out.println("文件总大小:"+sum); // 370257 单位:字节
    }
    private static long size(File dir) {
        long sum = 0;
        // 1.列出所有文件夹下面的所有资源
        File[] fs = dir.listFiles();
        
//      1.1 我们需要获取每个File对象,就需要遍历fs数组
        for (int i = 0; i < fs.length; i++) {
//          2.如果是文件,把文件的字节量累加 length()
            File file = fs[i];
            if(file.isFile()) {
                sum += file.length();
            }else if(file.isDirectory())  { //3.如果是文件夹,则继续遍历文件夹里的文件,进行判断,即继续递归
                sum += size(file);
            }
        }
//      返回文件总大小
        return sum;
    }
}

经过上述的是,我的指定路径的字节总数是:370257B,可以通过该文件夹右键 -> 属性,查看到的字节数和程序运行结果一致。

递归删除文件夹

代码演示:

import java.io.File;
import java.util.Scanner;
public class Test4_Delete {
    public static void main(String[] args) {
        // 接收用户输入的路径
        String path = new Scanner(System.in).nextLine();
        // 创建File对象
        File dir = new File(path);
        
        delete(dir);
        System.out.println("删除成功!!!");
    }
        /*
     * dir可以是文件路径,也可以是文件夹路径
     */
     private static void delete2(File dir) {
        // TODO Auto-generated method stub
        if(!dir.exists()) { //如果路径不存在,直接返回
            return;
        }
//      1.判断是否是文件,是的话直接删除
        if(dir.isFile()) {
            dir.delete(); // 删除文件
        } else if(dir.isDirectory()) {  // 2.判断是否是目录
            for(File f : dir.listFiles()) { // 2.1 遍历目录下的所有的资源(文件和文件夹)
                delete(f); // 进入目录,重新检查,递归调用
            }
            delete(dir); // 删除外层文件夹
        }
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!