JavaSe-File类

File类

1.什么是File类

File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)
File是用来表示文件文件夹的类。



2.为什么要使用File类

在开发中,创建文件、删除文件、修改文件的属性时经常会用到的本类。

并未涉及到写入或读取文件内容,如需要读取或写入文件内容,必须使用IO流来完成

说明:File本身的对文件的一些属性的操作用File类。
涉及到File内容的操作,如:读写数据,就要用到IO流。



3.怎么用File类


3.1 创建File类的实例
1. 如何创建File类的实例
  • File(String filePath)
  • File(String parentPath,String childPath)
  • File(File parentFile,String childPath)

2.** 文件的路径问题**(浅层次的概述)

相对路径:相较于某个路径下,指明的路径。
绝对路径:包含盘符在内的文件或文件目录的路径


3. 路径分隔符
	windows和DOS: \\\\
	Unix和Linux: /

4. 创建File类的实例代码
//构造器1:File(String filePath)
File file = new File("HelloWorld.txt");//在此module下的相对路径
File file1 = new File("C:\\Users\\Administrator\\Desktop\\Hello.txt");//绝对路径

//构造器2:File(String parentPath,String childPath)
File file2 = new File("C:\\Users\\Administrator", "Desktop");

//构造器3:File(File parentFile,String childPath)
File file3 = new File(file2, "Hello.txt");


3.2 File类的常用方法:
1. 获取文件的信息:
  • String getAbsolutePath():获取绝对路径
  • String getPath():获取路径
  • String getName():获取名称
  • String getParent():获取上层文件目录路径。若无,返回null
  • long length():获取文件长度(即:字节数)。不能获取文件夹的大小。
  • long lastModified():获取最后一次的修改时间,毫秒值

//获取文件基本信息示例代码
@Test
public void test1(){
    File file1 = new File("hello.txt");
    File file2 = new File("d:\\develop\\hi.txt");

    System.out.println(file1.getAbsolutePath());
    System.out.println(file1.getPath());
    System.out.println(file1.getName());
    System.out.println(file1.getParent());
    System.out.println(file1.length());
    System.out.println(new Date(file1.lastModified()));

}


2. 获取文件目录下的所有文件或文件夹:
  • String[] list() :获取指定目录下的所有文件或者文件目录的名称数组

  • File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组

    //获取指定文件路径下所有文件或文件夹的名称或对象示例代码
    @Test
    public void test2(){
        File file = new File("D:\\develop");
    
        //获取路径下所有文件的名称:String[] list()
        String[] list = file.list();
        for(String s : list){
            System.out.println(s);
        }
    
        System.out.println();
    
        //获取路径下所有文件的File对象:File[] listFiles()
        File[] files = file.listFiles();
        for(File f : files){
            System.out.println(f);
        }
    }
    

3. 重命名[+转移]:
  • boolean renameTo(File dest):把文件重命名并转移到指定的文件路径
    比如:file1.renameTo(file2)为例:
    要想保证返回true,需要file1在硬盘中是存在的,且file2在硬盘中是不存在的。

    //重命名的示例代码
    @Test
    public void test3(){
        File file1 = new File("hello.txt"); //要存在(路径要正确!)
        File file2 = new File("D:\\io\\hi.txt");//不能存在
    
        boolean renameTo = file1.renameTo(file2);
        System.out.println(renameTo);
    
    }
    

4. 判断功能:
  • boolean isDirectory():判断是否是文件目录
  • boolean isFile():判断是否是文件
  • boolean exists():判断是否存在
  • boolean canRead():判断是否可读
  • boolean canWrite():判断是否可写
  • boolean isHidden():判断是否隐藏

//判断功能示例代码
@Test
public void test4(){
    File file1 = new File("hello.txt");

    System.out.println(file1.isDirectory());   //false
    System.out.println(file1.isFile());		   //true
    System.out.println(file1.exists());  	   //true
    System.out.println(file1.canRead());       //true
    System.out.println(file1.canWrite());      //false
    System.out.println(file1.isHidden());      //false

}

5.创建与删除功能:
创建硬盘中对应的文件或文件目录
  • boolean createNewFile():>创建文件。若文件存在,则不创建,返回false

  • boolean mkdir():创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。

  • boolean mkdirs():创建文件目录。如果此文件目录存在,就不创建了。 如果上层文件目录不存在,一并创建。

删除磁盘中的文件或文件目录
  • boolean delete():删除文件或者文件夹。
    删除注意事项:1)对文件夹来说,要想删除成功,其目录下不能有子目录或文件。

      								(一次只能删除一个文件或文件夹)
                               2)Java中的删除不走回收站。  								
    
//创建和删除文件示例代码
@Test
public void test5() throws IOException {
    File file1 = new File("hi.txt");
    if(!file1.exists()){
        //文件的创建,如果文件已存在,则创建失败。
        file1.createNewFile();

    }else{//文件存在
        file1.delete();
    }
}
//创建文件夹
@Test
public void test6(){
    //文件目录的创建:
    //1)创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
    File file1 = new File("d:\\io\\io1\\io2");
    boolean mkdir = file1.mkdir();

    //2)创建文件目录。如果此文件目录存在,就不创建了。如果上层文件目录不存在,一并创建。
    File file2 = new File("d:\\io\\io1\\io4");
    boolean mkdir1 = file2.mkdirs();

    //要想删除成功,io1文件目录下不能有子目录或文件
    File file3 = new File("D:\\io\\io1");
    System.out.println(file3.delete());
    
}


4.课后练习

课后练习1:文件[夹]的创建与删除

创建和删除某个路径下的文件或文件夹。

@Test
public void test1() throws IOException {
    File file = new File("hello.txt");
    //创建文件
    boolean newFile = file.createNewFile();
    System.out.println(newFile);
    //删除文件
    boolean delete = file.delete();
    System.out.println(delete);
}



课后练习2:查找指定后缀名的文件

判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称。

//方法一
@Test
public void test2() {
    File file = new File("C:\\Users\\Administrator\\IdeaProjects\\TestGithub");
    String[] list = file.list();
    for (String s : list) {
        if(s.endsWith(".jpg")){
            System.out.println(s);
        }
    }

    File[] files = file.listFiles();
    for (File file1 : files) {
        if(file.getName().endsWith(".jpg")){
            System.out.println(files);
        }
    }
}

/**
 * 方法二:使用文件过滤器直接过滤文件
 *  File类提供了两个文件过滤器方法
 *     String[] list(FilenameFilter filter)
 *     File[] listFiles(FileFilter filter)
 */
@Test
public void test3() {
    File file = new File("C:\\Users\\Administrator\\IdeaProjects\\TestGithub");
    String[] files = file.list(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return name.endsWith(".jpg");
        }
    });
    for (String s : files) {
        System.out.println(s);
    }
}



课后练习3:遍历所有文件…

遍历指定目录所有文件名称,包括子文件目录中的文件。

    public static void main(String[] args) {
        // 递归:文件目录
        //打印出指定目录所有文件名称,包括子文件目录中的文件 

        // 1.创建目录对象
        File dir = new File("C:\\Users\\Administrator\\IdeaProjects\\TestGithub");

        // 2.打印目录的子文件
        printSubFile(dir);

        //3.打印目录的下一级内容
        listSubFiles(dir);

        //4.打印目录的子文件(与 printSubFile(dir)基本类似)
        listAllSubFiles(dir);
    }

    private static int length=0;
    public static void printSubFile(File dir) {
        length++;

        // 打印目录的子文件
        File[] subfiles = dir.listFiles();

        for (File f : subfiles) {
            for (int i = 1; i < length; i++) {
                System.out.print("\t");
            }

            if (f.isDirectory()) {// 文件目录
                System.out.println(f.getName());
                printSubFile(f);
            } else {// 文件
                System.out.println(f.getName());
            }
        }
        length--;
    }

    // 方式二:循环实现
    // 列出file目录的下级内容,仅列出当前文件夹下的内容(文件或文件夹)
    // 使用File类的String[] list()比较简单
    public static void listSubFiles(File file) {
        if (file.isDirectory()) {
            //获取的是相对路径
            String[] all = file.list();
            for (String s : all) {
                System.out.println(s);
            }
        } else {
            System.out.println(file + "是文件!");
        }
    }

    // 列出file目录的下级,如果它的下级还是目录,接着列出下级的下级,依次类推
    // 建议使用File类的File[] listFiles()
    public static void listAllSubFiles(File file) {
        if (file.isFile()) {
            System.out.println(file);
        } else {
            //获取的是绝对路径
            File[] all = file.listFiles();
            // 如果all[i]是文件,直接打印
            // 如果all[i]是目录,接着再获取它的下一级
            for (File f : all) {
                listAllSubFiles(f);// 递归调用:自己调用自己就叫递归
            }
        }
    }

拓展1: 求指定目录所有文件的大小
// 拓展1:求指定目录所有文件的大小
// 求任意一个目录的总大小(取出每个文件的大小,加起来,因为无法直接获得目录的总大小)
public long getDirectorySize(File file) {
    // file是文件,那么直接返回file.length()
    // file是目录,把它的下一级的所有大小加起来就是它的总大小
    long size = 0;
    if (file.isFile()) {
        size += file.length();
    } else {
        File[] all = file.listFiles();// 获取file的下一级
        // 累加all[i]的大小
        for (File f : all) {
            size += getDirectorySize(f);// f的大小;
        }
    }
    return size;
}

拓展2:删除指定的目录的所有文件
// 拓展2:删除指定的目录
public void deleteDirectory(File file) {
    // 如果file是文件,直接delete
    // 如果file是目录,先把它的下一级干掉,然后删除自己
    if (file.isDirectory()) {
        File[] all = file.listFiles();
        // 循环删除的是file的下一级
        for (File f : all) {// f代表file的每一个下级
            deleteDirectory(f);
        }
    }
    // 删除自己
    file.delete();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值