JavaSE-IO流-File类的使用

目录

送给自己的一句话:学习编程,最重要的就是实践(有输入也要有输出)

1.File类简介

3.File类常用构造器

4.File类常用方法

5.File类练习


送给自己的一句话:学习编程,最重要的就是实践(有输入也要有输出)

1.File类简介

  • java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关;
  • File对象能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流;
  • 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录;
  • File对象可以作为参数传递给流的构造器;

2.路径分隔符

  • 路径中的每级目录之间用一个路劲分隔符隔开;
  • 路劲分隔符和系统有关: 
    • Windows和DOS系统默认使用" \ " 来表示;
    • UNIX和URL使用" / " 来表示;
  •  Java程序支持跨平台运行,因此路劲分隔符要慎用;
  •  为了解决这个隐患,File类提供了一个常量:
    • public static final String separator:根据操作系统,动态的提供分隔符;
    •   

3.File类常用构造器

     

public File(String pathname)以pathname为路劲创建File对象,可以是绝对路劲/相对路径
public File(String parent,String child)以parent为父路径,child为子路径创建File对象

public File (File   parent,String child)

根据一个父File对象和子文件路径创建File对象

知识点: 相对路径和绝对路径的区别?

  •  绝对路径:是一个固定的路径,从盘符开始
  •  相对路径:是相对于某个位置开始

代码示例:

 public static void main(String[] args) {

        //构造器1  public File(String pathname)
        File file1 = new File("D:\\io流");

        //构造器2  public File(String parent,String child)
        File file2 = new File("D:\\io流","File");

        //构造器3  public File (File  parent,String child)
        File file3 = new File(file1,"File");
    }

 

4.File类常用方法

                                      

File类的获取功能: 
public String getPath()获取路径
public String getName() 获取名称
public String getParent()获取上级文件目录路径(若无,返回null)
public long length()获取文件长度(字节数),不能获取目录长度
public long lastModified()获取最后一次修改时间,毫秒值
public String getAbsolutePath()获取绝对路径
public String[] list()获取指定目录下的所有文件或者文件目录的名称数组
public File[] listFiles()获取指定目录下的所有文件或者文件目录的File数组
  

 File类的重命名功能:

 
public boolean renameTo(File dest)把文件重命名为指定的文件路径
  
File类的判断功能: 
public boolean isDirectory()

判断是否是文件目录

public boolean isFile() 判断是否是文件
public boolean exists() 判断是否存在
public boolean canRead() 判断是否可读
public boolean canWrite()判断是否可写
public boolean isHidden()判断是否隐藏
  

File类的创建功能:

 
public boolean createNewFile()创建文件,若文件存在,则不创建,返回false
public boolean mkdir()创建文件目录,如果此文件目录存在,就不创建; 若此文件的上层目录不存在,也不创建
public boolean mkdirs()创建文件目录,如果上层文件目录不存在,一并创建
注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目 路径下。
  
File类的删除功能 
public boolean delete()删除文件或者文件夹
注意事项:Java中删除不走回收站,要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录!

5.File类练习

学习完,就要实践哦,一起来检验下自己的学习成果吧!

1. 利用File构造器,new 一个文件目录file

        1)在其中创建多个文件和目录

         2)编写方法,实现删除file中指定文件的操作

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

代码示例:

import org.junit.Test;

import java.io.File;

/**
 * @author: wuhao
 * @since: 2021/4/19 21:36
 */
public class FindJPG {

    //判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
    @Test
    public void Test1(){
        String directory = "D:\\学习资料\\谷粒学院项目资料";
        String format = "jpg";
        File file = new File(directory);
        findJPG(file,format);
    }

    //找到此目录下所有的.jpg文件
    public void findJPG(File file, String format) {
         int count = 0;  //用于记录.jpg文件的数量
         //1.获取file目录下所有的File对象
        File[] files = file.listFiles();
        //2.遍历File数组
        for (int i = 0; i<files.length; i++){
            File fileOrDir = files[i];
            //3.判断是否是文件,是 比较格式
            if (fileOrDir.isFile()){
                String[] newString = fileOrDir.getName().split("\\.");
                if (format.equals(newString[1])){
                    count++;
                    System.out.println(fileOrDir.getName());
                }
            }
        }
        if (count==0){
            System.out.println("此文件目录下没有.jpg文件!");
        }
    }
}

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

拓展1:并计算指定目录占用空间的大小

拓展2:删除指定文件目录及其下的所有文件

代码示例:

import org.junit.Test;

import java.io.File;
import java.sql.SQLOutput;

/**
 * @author: wuhao
 * @since: 2021/4/19 22:39
 */
public class RecursionDir {

    /**
     * 3. 遍历指定目录所有文件名称,包括子文件目录中的文件。(
     * <p>
     * 拓展1:并计算指定目录占用空间的大小
     * <p>
     * 拓展2:删除指定文件目录及其下的所有文件
     * <p>
     * )
     */
    @Test
    public void Test1() {
        String directory = "D:\\应用软件\\CloudMusic";
        File file = new File(directory);

        findAllFileName(file);

        Long fileDirSize = getFileDirSize();
        System.out.println(file.getAbsolutePath() + "-目录大小为:" + fileDirSize + " 字节");
    }
    
    //拓展1:并计算指定目录占用空间的大小
    long fileDirSize = 0;
    
    //获取指定目录下以及子目录下的所有文件名称
    private void findAllFileName(File file) {
        File[] files = file.listFiles();//获取此目录下所有的文件对象
        for (File file1 : files) {//遍历
            if (file1.isFile()) {//判断是否是文件
                System.out.println(file1.getName());
                fileDirSize += file1.length();
            }
            if (file1.isDirectory()) {//判断是否是目录
                findAllFileName(file1);//递归
            }
        }
    }

    //获取目录大小;
    private Long getFileDirSize() {
        return this.fileDirSize;
    }


    /**
     * 拓展2:删除指定文件目录及其下的所有文件
     */
    @Test
    public void Test2() {

        String directory = "D:\\io流";
        File file = new File(directory);
        deleteDir(file);
    }

    private void deleteDir(File file) {
        File[] files = file.listFiles();//获取此目录下所有的文件对象
        for (File file1 : files) {//遍历
            if (file1.isFile()) {//判断是否是文件
                file1.delete();//删除文件
            }
            if (file1.isDirectory()) {//判断是否是目录
                deleteDir(file1);//递归删除文件
                file1.delete();//删除目录
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值