File文件对象

File文件对象

在计算机系统中,文件是非常重要的存储方式。Java的标准库java.io提供了File对象来操作文件和目录。要构造一个File对象,需要通过构造方法,传入该文件的本地物理路径。

例如:

import java.io.*
public class Main{
    public static void main(String[] args){
        File f = new File("C:\\Windows\\notepad.exe");
        System.out.println(f);
    }
}

 相对路径和绝对路径

构造File对象时,既可以传入绝对路径,也可以传入相对路径。绝对路径时以根目录开头的完整路径

注意:Windows平台使用 \ 作为路径分隔符,在Java字符串中需要用 \\ 表示一个 \ 。

File f = new File("C:\\Windows\\notepad.exe");

传入相对路径时,相对路径前面加上当前目录就是绝对路径,可以用 . 表示当前目录,.. 表示上级目录。

//假设当前目录是C:\Docs
File f1 = new File("sub\\javac");//绝对路径是C:\Docs\sub\javac
File f2 = new File(".\\sub\\javac");//绝对路径是C:\Docs\sub\javac
File f3 = new File("..\\sub\\javac");//绝对路径是C:\sub\javac

File对象有3中形式表示的路径,一种是getPath(),返回构造方法传入的路径,一种是getAbsolutePath(),返回绝对路径,一种是getCanonicalPath(),他和绝对路径类似,但返回的是规范路径。

Public class Main{
    public static void main(String[] args){
        File f = new File("..");
        System.out.println(f.getPath());
        System.out.println(f.getAbsolutePath());
        System.out.println(f.getCanonicalPath());
    }
}

因为Windows和Linux的路径分隔符不同,File对象有一个静态变量用于表示当前平台的系统分隔符:

System.oput.println(File.separator);//根据当前平台打印“\”或“/”

文件操作

用File对象获取到一个文件时,还可以进一步对文件进行如下常见操作:

  • boolean createNewFile():创建新文件
  • boolean delete():删除文件
  • boolean exists():判断文件是否存在
  • String getPath():构造方法传入的路径
  • String getAbsolutePath():绝对路径
  • String getCanonicalPath():规范路径
  • String getName:获取文件名称
  • String getParent():获取文件所在父级目录名称
  • File getParentFile():获取文件所在父级目录对象
  • boolean isFile():判断是否是一个文件
  • long lastModified():获取文件最后修改时间
  • long length():文件内容的字节长度
  • boolean createNewFile():创建新文件

目录操作

File对象既可以表示文件,也可以表示目录。特别要注意的是,构造一个File对象,即使传入的文件或目录不存在,代码也不会出错,因为构造一个File对象,并不会导致任何磁盘操作。只有当我们调用File对象的某些方法的时候,才真正进行磁盘操作。

例如,调用isFile(),判断该File对象是否是一个已存在的文件,调用isDirectory(),判断该File()是否是一个已存在的目录:

import java.io.*

public class Main{
    public static void main(String[] args) throws IOException{
        File f1 = new File("C:\\Windows");
        File f2 = new File("C:\\Windows\\notepad.exe");
        File f3 = new File("C:\\Windows\\nothing");
        System.out.println(f1.isFile());
        System.out.println(f1.isDirectory());
        System.out.println(f2.isFile());
        System.out.println(f2.isDirectory());
        System.out.println(f3.isFile());
        System.out.println(f3.isDirectory());
    }
}

用File对象获取到一个目录时,还可以进一步对目录进行如下操作:

  • String[] list():获取目录中所有子文件和目录的名称
  • File[] listFiles():获取目录中所有子文件的目录对象
  • boolean mkdir():创建当前File对象表示的目录
  • boolean mkdirs():创建当前File对象表示的目录,并在必要时将不存在的父目录也创建出来
  • boolean delete():删除当前File对象表示的目录,当前目录必须为空才能成功删除

遍历目录中的文件

当file对象表示一个目录时,可以使用list()和listFiles()列出目录下的文件和子目录名。listFiles()提供了一系列重载方法,可以过滤不想要的文件和目录:

import java.io.*;

public class Main {
    public static void main(String[] args) {
        File f = new File("C:\\Windows");
        File[] fs1 = f.listFiles();//列出所有文件和子目录
        printFiles(fs1);

        File[] fs2 = f.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
               return name.endsWith(".exe");
            }
        });
        printFiles(fs2);
    }

    static void printFiles(File[] files) {
        if (files != null){
            for (File f : files){
                if (f.isDirectory()){
                    System.out.printf("【目录】%s\n",f.getAbsolutePath());
                }else {
                    System.out.printf("【文件】%s(%d字节)\n",f.getName(),f.length());
                }
            }
        }
    }
}

 分区操作

可以通过File类的静态方法public static File[] listRoots()获取本系统中的所有磁盘分区,每个分区可以分别通过long getTotalSpace()获取磁盘分区的总空间、可用空间、闲置空间。

import java.io.File;

public class Main {
    public static void main(String[] args) {
        File[] roots = File.listRoots();
        for (File part : roots) {
            System.out.println(part.getPath());//获取磁盘名称
            System.out.println(part.getTotalSpace()/1024/1024/1024+"GB");//获取磁盘总容量
            System.out.println(part.getUsableSpace()/1024/1024/1024+"GB");//获取磁盘可用空间
            System.out.println(part.getFreeSpace()/1024/1024/1024+"GB");//获取磁盘空闲容量(包括未分配空间)
            System.out.println();
        }
    }
}

小结

Java标准库的java.io.File对象表示一个文件或者目录:

  • 创建File对象本身不涉及IO操作
  • 可以获取路径/绝对路径/相对路径:getPath()/getAbsolutePath()/getCanonicalPath()
  • 可以获取目录的文件和子目录:list()/listFiles()
  • 可以创建或删除文件和目录。
  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晓晨CH

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

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

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

打赏作者

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

抵扣说明:

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

余额充值