Java IO流中的File类及其常用方法

File类的使用

在这里插入图片描述

File类三个常见的构造器
在这里插入图片描述如何创建File类的实例:File类三个常见的构造器的使用

先了解目录结构:
在这里插入图片描述

测试:

package com.atguigu.java;
import org.junit.Test;
import java.io.File;
/**
 *
 * File类的一个对象,代表一个文件或一个文件目录(文件夹)
 * File类声明在 java.io包下
 *
 */
public class FileTest {
    public static void main(String[] args) {
        File file1=new File("hello.txt");
        System.out.println(file1.getAbsolutePath());
        //输出E:\ideaworkspace\ideaprojects\JavaSenior\hello.txt
        // 注意:main方法下的,helllo.txt相对路径是相对于当前工程JavaSenior
    }

    //以下都还没有在硬盘中存储相应的文件,只是内存层面的几个对象
    @Test
    public void test1(){
        //创建File类的实例。方式一:File(String filePath)
        File file1=new File("hello.txt");  //相对路径。
        // 注意:单元测试方法下,hello.txt的相对路径是相对于当前module而言
        
        File file2=new File("E:\\ideaworkspace\\ideaprojects\\JavaSenior\\day09\\he.txt"); //绝对路径
        System.out.println(file1);  //hello.txt
        System.out.println(file2);  //E:\ideaworkspace\ideaprojects\JavaSenior\day09\he.txt
        //此时输出了两个文件的路径。因为这还只是内存层面的一个对象,还没有涉及到对文件数据的删改等操作。

        //创建File类的实例。方式二:File(String parentPath,String childPath)
        File file3=new File("E:\\ideaworkspace\\ideaprojects","JavaSenior");
        System.out.println(file3); //E:\ideaworkspace\ideaprojects\JavaSenior

        //创建File类的实例。方式三:File(File parent,String childPath)
        File file4=new File(file3,"hi.txt");
        System.out.println(file4); //E:\ideaworkspace\ideaprojects\JavaSenior\hi.txt

    }
}

2,File类常用方法

① File类的获取功能:

package com.atguigu.java;
import org.junit.Test;
import java.io.File;
import java.util.Date;
/**
 *  File 类的常用方法
 */
public class MethodTest {
    /*
 File类的获取功能
 public String getAbsolutePath():获取绝对路径
 public String getPath() :获取路径
 public String getName() :获取名称
 public String getParent():获取上层文件目录路径。若无,返回null
 public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
 public long lastModified() :获取最后一次的修改时间,毫秒值
    */
    @Test
    public void test1(){
        File file1=new File("hello.txt");  //相对路径。此处是相对当前的module而言。此处创造条件使module下的hello.txt文件存在,里面内容为“helloworld”
        File file2=new File("D:\\IO\\hi.txt"); //绝对路径。此处创造条件使D盘下的IO文件夹为空,hi.txt不存在

        System.out.println(file1.getAbsolutePath()); //E:\ideaworkspace\ideaprojects\JavaSenior\day09\hello.txt
        System.out.println(file1.getPath());  //hello.txt
        System.out.println(file1.getName()); //hello.txt
        System.out.println(file1.getParent());  //null。"hello.txt" 写成相对路径为null,写成绝对路径才能看到
        System.out.println(file1.length());  //10。10个字节
        System.out.println(file1.lastModified()); //1650108819853。得到毫秒数
        System.out.println(new Date(file1.lastModified())); //Sat Apr 16 19:33:39 CST 2022
        System.out.println("***********");
        System.out.println(file2.getAbsolutePath()); //D:\IO\hi.txt
        System.out.println(file2.getPath());  //D:\IO\hi.txt
        System.out.println(file2.getName()); //hi.txt
        System.out.println(file2.getParent());  //D:\IO
        System.out.println(file2.length());  //0
        System.out.println(file2.lastModified()); //0
    }
}

如下两个方法适用于文件目录获取:

首先E:\ideaworkspace\ideaprojects\JavaSenior的文件目录如下图:

在这里插入图片描述
测试list()、listfiles():

package com.atguigu.java;
import org.junit.Test;
import java.io.File;
/**
 *  File类的获取:
 * public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
 * public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
 *
 */
public class MethodTest {
    @Test
    public void test2(){
        File file=new File("E:\\ideaworkspace\\ideaprojects\\JavaSenior"); //若传入数据不存在,则会报错
        String[] list = file.list();
        for (String s:list){
            System.out.println(s);
        }
        System.out.println(); //换行
        File[] files=file.listFiles();
        for (File f:files){
            System.out.println(f);
        }
    }
}

在这里插入图片描述在这里插入图片描述


②File类的重命名功能

package com.atguigu.java;
import org.junit.Test;
import java.io.File;
public class MethodTest {
    @Test
    /*  File类的重命名功能:
    public boolean renameTo(File dest):把文件重命名为指定的文件路径。如file1.renameTo(file2)
    */
    public void test3() {
        File file1=new File("hello.txt");
        File file2=new File("D:\\IO\\hi.txt");

        boolean renameTo = file1.renameTo(file2);  //要想保证返回true,重命名成功。file1要存在,且file2不能存在
        System.out.println(renameTo); //true
    }
}

一开始当前moudle文件夹下的hello.txt文件存在,里面内容为"helloworld",且D盘IO文件夹中没有hi.txt。

执行以上代码之后,da09下的hello.txt消失,而D盘中IO文价夹下出现hi.txt,打开发现里面内容为"helloworld",如下图。

要想保证返回true,重命名成功。file1要存在,且file2不能存在。执行上述代码之后file1不存在,file2存在。
在这里插入图片描述


③File类的判断功能

先在day09目录下创建一个hello.txt文件,里面写入helloworld。
再进行如下测试

package com.atguigu.java;
import org.junit.Test;
import java.io.File;
public class MethodTest {
    @Test
    /*
 public boolean isDirectory():判断是否是文件目录
 public boolean isFile() :判断是否是文件
 public boolean exists() :判断是否存在
 public boolean canRead() :判断是否可读
 public boolean canWrite() :判断是否可写
 public boolean isHidden() :判断是否隐藏
    */
    public void test4() {
        //测试一个文件:注意此时的hello.txt是存在的,如果文件hello.txt不存在,以下输出全为false
        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()); //true
        System.out.println(file1.isHidden()); //false
        System.out.println();  //换行
        //测试一个文件目录:该目录是存在的,如果文件目录D:\IO不存在,则以下输出全为false
        File file2=new File("D:\\IO");
        System.out.println(file2.isDirectory());  //true
        System.out.println(file2.isFile());  //false
        System.out.println(file2.exists()); //true
        System.out.println(file2.canRead());  //true
        System.out.println(file2.canWrite()); //true
        System.out.println(file2.isHidden()); //false

    }
}


④File类的创建和删除功能
在这里插入图片描述简单演示:

package com.atguigu.java;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
/**
 *
 *  public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
 *  public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
 *  public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建
 * 注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目路径下。
 * 
 */
public class FileTest {
    @Test
    public void test1() throws IOException {
        //演示文件的创建和删除
        File file1=new File("hi.txt");
        if (!file1.exists()){  //file1不存在则进入循环
            file1.createNewFile();
            System.out.println("创建成功");
        }else{      //file1存在则删除file1
            file1.delete();
            System.out.println("删除成功");
        }
    }
    @Test   //创造条件使:一开始在D盘中有一个IO文件夹,里面内容为空。在这种情况下进行演示
    public void test2(){
        //演示文件目录的创建和删除
        File file1=new File("D:\\IO\\IO1");  //注意D盘中存在目录IO,即IO1的上层目录存在
        boolean mkdir = file1.mkdir();//此时调用mkdir()和调用mkdirs()没有区别
        if (mkdir){
            System.out.println("创建成功1");  //执行后在D盘IO文件夹下创建一个IO1的文件夹
        }

        File file2=new File("D:\\IOO\\IOO1");
        boolean mkdirs = file2.mkdirs();
        if (mkdirs){
            System.out.println("创建成功2");  //上层目录不存在,但此处可以创建相应成功
        }
    }
}

在这里插入图片描述


总结:
File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。

后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”


小练习:

创建一个与a.txt文件同目录下的另一个文件b.txt。

  •   File file1=new File("d:\\a\\a.txt");
      File file2=new File("file1.getParent()","b.txt");
    

注意:public String getParent():获取上层文件目录路径。若无,返回null

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过期动态

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值