Java-File(文件)

java.io.File

概念

File的每一个实例用于表示一个文件或目录的

  • 使用File可以:
    • 1:访问文件或目录的属性
    • 2:创建/删除文件或目录
    • 3:访问一个目录中的所有子项
  • 但是File不能:访问文件数据

File的创建

构造器
  • File(String pathName)

    根据给定的路径创建File对象来表示。

  • File(File parent,String pathName)

    表示parent表示的目录中指定的路径下对应的文件或目录

    其中parent表达的应当是一个目录

绝对路径与相对路径
  • 绝对路径:从系统定义的根目录开始,优点:清晰明了 缺点:不利于跨平台
    • “./”:当前目录,不同的运行环境定位不同。在IDEA中执行java程序时"./"表示当前项目目录
      • 在相对路径中"./“是可以忽略不写的,默认就是从”./"开始
    • 类加载路径,后期使用很多的相对路径。在后面学习项目阶段的课程中会介绍到
  • 相对路径:从运行环境定义的路径开始,优点:跨平台 缺点:路径定义模糊,需要视环境而定
package file;

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        /*
            创建File对象用来表示当前项目目录下的demo.txt文件
            参数:文件的路径
            路径分为两种:
            绝对路径:从系统定义的根目录开始,优点:清晰明了 缺点:不利于跨平台
            相对路径:从运行环境定义的路径开始,优点:跨平台 缺点:路径定义模糊,需要视环境而定
         */
//        File file = new File("C:/Users/TEACHER/IdeaProjects/JSD2303_SE/demo.txt");
        /*
            当前程序是在IDEA中运行的,因此IDEA就是当前程序的运行环境
            相对路径就是根据不同的运行环境而定。
            "./":称为"当前目录",在IDEA中当前目录指的是当前项目目录
         */
        File file = new File("./demo.txt");
    }
}

访问属性的相关方法

  • String getName()

    返回当前File对象表示的文件或目录的名字

  • long length()

    返回当前File对象表示的文件的长度,单位是字节

  • boolean canRead()

    返回当前File对象表示的文件或目录是否可读

  • boolean canWrite()

    返回当前File对象表示的文件或目录是否可写

  • boolean isHidden()

    返回当前File对象表示的文件或目录是否被隐藏

  • boolean exists()

    判断当前File对象表示的文件或目录是否已经存在

先手动在IDEA的当前项目目录下新建一个名为demo.txt的文件,并在文件中随意的输入些文字

具体操作:

  • IDEA菜单中File->New->File

    在这里插入图片描述

  • 在弹出框中输入demo.txt

    在这里插入图片描述

  • 双击打开这个文件随意输入些文字

    在这里插入图片描述

package file;

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        File file = new File("./demo.txt");
        //获取名字
        String name = file.getName();
        System.out.println(name);
        //获取File表示的文件的长度(单位是字节)
        long len = file.length();
        System.out.println("占用的字节数:"+len);
        //是否可读
        boolean cr = file.canRead();
        //是否可写
        boolean cw = file.canWrite();
        //是否是被隐藏
        boolean ih = file.isHidden();
        System.out.println("可读:"+cr);
        System.out.println("可写:"+cw);
        System.out.println("是否隐藏:"+ih);

    }
}

创建与删除文件

文件的创建
方法

boolean createNewFile()

在当前File表示的路径下将文件创建出来。

如果指定的文件不存在并成功地创建,则返回true;如果指定的文件已经存在,则返回 false

package file;

import java.io.File;
import java.io.IOException;

/**
 * 使用File对象新建一个文件
 */
public class CreateNewFileDemo {
    public static void main(String[] args) throws IOException {
        /*
            在当前项目目录下新建一个名为:test.txt的文件
         */
        //1创建一个File对象来表示该路径
        File file = new File("./test.txt");
        //2创建这个文件  返回true:文件被创建  false:文件已经存在无法再创建
        boolean success = file.createNewFile();
        if(success){
            System.out.println("创建成功");
        }else{
            System.out.println("该文件已存在");
        }
    }
}

在这里插入图片描述

练习

在当前项目目录下新建100个文件,名字为test1.txt–test100.txt

package file;

import java.io.File;
import java.io.IOException;

/**
 * 在当前项目目录下新建100个文件
 * 名字为test1.txt--test100.txt
 *
 * 提示:
 * 1:使用for循环,循环变量控制在1-100
 * 2:可以将循环变量拼接起来形成文件名
 * 3:使用File对象表示这个文件名并将它创建出来
 */
public class Test1 {
    public static void main(String[] args) throws IOException {
        for(int i=1;i<=100;i++){
            File file = new File("./test"+i+".txt");
            file.createNewFile();
        }
        System.out.println("创建完毕!");
    }
}

文件的删除
方法

boolean delete()

删除当前File对象表示的文件。

当且仅当成功删除文件或目录时,返回true;否则返回false

package file;

import java.io.File;

/**
 * 删除一个文件
 */
public class DeleteFileDemo {
    public static void main(String[] args) {
        /*
            将当前项目目录下的test.txt文件删除
         */
        //1创建File对象表示要删除的文件
        //在相对路径中"./"是可以忽略不写的,默认就是从"./"开始
//        File file = new File("./test.txt");
        File file = new File("test.txt");

        file.delete();
        System.out.println("文件已删除");
    }
}

练习

删除当前项目目录下100个文件,test1.txt–test100.txt

package file;

import java.io.File;

/**
 * 删除当前项目目录下100个文件
 * test1.txt--test100.txt
 */
public class Test2 {
    public static void main(String[] args) {
        for(int i=1;i<=100;i++){
            File file = new File("./test"+i+".txt");
            file.delete();
        }
        System.out.println("创建完毕!");
    }
}

创建与删除目录

目录的创建
方法

boolean mkdir()

将当前File表示的目录创建出来。该方法要求当前File表示的目录所在的父目录必须存在,否则创建失败

当且仅当已创建目录时,返回 true;否则返回 false

package file;

import java.io.File;

/**
 * 创建一个目录
 */
public class MkDirDemo {
    public static void main(String[] args) {
        //在当前项目目录下新建一个名为:demo的目录
        File dir = new File("demo");
        /*
            boolean exists()
            判断当前File对象表示的文件或目录是否已经存在,如果已经存在则返回true

            boolean mkdir()
            将当前File对象表示的目录创建出来,当且仅当目录成功创建时返回true
         */
        if(!dir.exists()) {
            dir.mkdir();
            System.out.println("该目录已创建");
        }else{
            System.out.println("该目录已存在");
        }

    }
}
创建多级目录
方法

boolean mkdirs()

创建当前File对象表示的目录,并且会自动创建所有不存在的父目录

当且仅当已创建目录以及所有必需的父目录时,返回true;否则返回 false

实际开发中推荐用该方法创建目录

package file;

import java.io.File;

/**
 * 创建多级目录
 */
public class MkDirsDemo {
    public static void main(String[] args) {
        /*
            在当前目录下新建:a/b/c/d/e/f目录
         */
        //当前dir表达式的是f目录,只不过f是在前面对应的里面
        File dir = new File("a/b/c/d/e/f");
        if(dir.exists()){
            System.out.println("该目录已存在!");
        }else{
            /*
                创建失败
                原因:mkdir()方法在创建目录时要求该目录所在的父目录必须真实存在
                    否则创建失败
             */
//            dir.mkdir();
            /*
                mkdirs()方法在创建目录时会自动将不存在的父目录一同创建出来
                实际开发中推荐用这个方法创建目录
             */
            dir.mkdirs();
            System.out.println("该目录已创建!");
        }
    }
}
目录的删除
方法

boolean delete()

与删除文件是同一个方法,如果File表示的是目录也可以被删除

删除目录时要求该目录必须是一个空目录,否则删除失败

package file;

import java.io.File;

/**
 * 删除目录
 */
public class DeleteDirDemo {
    public static void main(String[] args) {
        //将当前项目目录下的demo目录删除
        //File dir = new File("./demo");
        File dir = new File("./a");//删除失败,因为a不是一个空目录
        if(dir.exists()){
            dir.delete();
            System.out.println("该目录已删除");
        }else{
            System.out.println("该目录不存在");
        }
    }
}

访问目录内容

访问一个目录中的所有子项
方法

FIle[] listFiles()

获取当前File对象表示的目录中的所有子项。返回的数组中每个FIle对象表示该目录中的一个子项。

相关方法

boolean isFile()

判断当前File对象表达的是否为一个真实存在的文件

boolean isDirectory()

判断当前File对象表达的是否为一个真实存在的目录

package file;

import java.io.File;

/**
 * 获取一个目录中的所有子项
 */
public class ListFilesDemo {
    public static void main(String[] args) {
        //将当前目录中的所有子项列出
        //1创建File对象表示当前目录
        File dir = new File(".");
        if(dir.isDirectory()) {//存在且确实为一个目录
            //2列出该目录中的所有子项
            File[] subs = dir.listFiles();
            System.out.println("一共有"+subs.length+"个子项");
            //遍历数组,获取每一个子项
            for(File sub : subs){
                String name = sub.getName();//获取该File对象表示的文件或目录的名字
                System.out.println(name);
            }
        }
    }
}

在这里插入图片描述

练习

定义一个过滤器,获取当前目录下子项名字中含有字母"a"的所有子项

package file;

import java.io.File;
import java.io.FileFilter;

/**
 * 定义一个过滤器,获取当前目录下子项名字中含有字母"a"的所有子项
 *
 * indexOf("a")是否>=0,因为当字符串不含有"a"时indexOf返回值为-1
 *
 * String提供了直接判断是否包含指定内容的方法
 * boolean contains(String str)
 * 当前字符串包含参数str表示的字符串内容时则返回true
 */
public class Test3 {
    public static void main(String[] args) {
        File dir = new File(".");
        if(dir.isDirectory()){
//            FileFilter filter = new FileFilter() {
//                public boolean accept(File f) {
//                    return f.getName().contains("a");
//                }
//            };
//            File[] subs = dir.listFiles(filter);
            /*
                FileFilter接口只有一个抽象方法
                因此可以使用lambda表达式创建
             */
            File[] subs = dir.listFiles(f->f.getName().contains("a"));
            for(File sub : subs){
                System.out.println(sub.getName());
            }
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

字节探索者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值