Java File类 操作目录 操作文件 文件夹遍历

Java File类 操作目录 操作文件

File

文件和目录路径名的抽象表示形式。

文件:

为了便于数据的管理和检索,引入了“文件”的概念。一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。

一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别,这是从文件的功能进行分类的。从数据存储的角度来说,所有的文件本质上都是一样的,都是由一个个字节组成的,归根到底都是 0、1 比特串。

文件夹(目录):

成千上万个文件如果不加分类放在一起,用户使用起来显然非常不便,因此又引入了树形目录(目录也叫文件夹)的机制,可以把文件放在不同的文件夹中,文件夹中还可以嵌套文件夹,这就便于用户对文件进行管理和使用

  • 对于 UNIX 平台,绝对路径名的前缀始终是 "/"。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 "/" 且名称序列为空。

  • 对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个 ":" 组成。如果路径名是绝对路径名,还可能后跟 "\\"

相对路径与绝对路径

无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 路径名。绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件。相反,相对路径名必须使用取自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。 IDEA中相对路径起始点位于本项目的根目录

  • 相对路径:相对于当前文件位置的路径
  • 引用上上级文件: …/…/test.txt
  • 引用上级文件: …/test.txt
  • 引用同级文件: test.txt
  • 引用下级文件: dir/test.txt
  • 绝对路径
    • D:\Documents\study_original_file\dir\test.txt

文件系统可以实现对实际文件系统对象上的某些操作(比如,读、写、执行)进行限制。这些限制统称为访问权限。文件系统可以对一个对象设置多个访问权限。例如,一个设置可能适用于对象的所有者,另一个设置则可能适用于所有其他用户。对象上的访问权限可能导致此类的某些方法执行失败。

File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。

字段摘要

TypeFiledDescription
static StringpathSeparator与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static charpathSeparatorChar与系统有关的路径分隔符。
static Stringseparator与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static charseparatorChar与系统有关的默认名称分隔符。

构造器

构造器描述
File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

方法摘要

介绍File方法之前我们先了解java.io 接口 FilenameFilter(文件名过滤器),其只有一个方法

  • boolean accept(File dir, String name)
    • 测试指定文件是否应该包含在某一文件列表中。 dir - 被找到的文件所在的目录。name - 文件的名称。

也因此其经常作为匿名类出现,甚至因lambda表达式而深藏功与名

Modifier and TypeMethodDescription
booleancanExecute()测试应用程序是否可以执行此抽象路径名表示的文件。
booleancanRead()测试应用程序是否可以读取此抽象路径名表示的文件。
booleancanWrite()测试应用程序是否可以修改此抽象路径名表示的文件。
intcompareTo(File pathname)按字母顺序比较两个抽象路径名。
booleancreateNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
static FilecreateTempFile(String prefix, String suffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
static FilecreateTempFile(String prefix, String suffix, File directory)在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
booleandelete()删除此抽象路径名表示的文件或目录。
voiddeleteOnExit()在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
booleanequals(Object obj)测试此抽象路径名与给定对象是否相等。
booleanexists()测试此抽象路径名表示的文件或目录是否存在。
FilegetAbsoluteFile()返回此抽象路径名的绝对路径名形式。
StringgetAbsolutePath()返回此抽象路径名的绝对路径名字符串。
FilegetCanonicalFile()返回此抽象路径名的规范形式。
StringgetCanonicalPath()返回此抽象路径名的规范路径名字符串。
longgetFreeSpace()返回此抽象路径名指定的分区中未分配的字节数。
StringgetName()返回由此抽象路径名表示的文件或目录的名称。
StringgetParent()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
FilegetParentFile()返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
StringgetPath()将此抽象路径名转换为一个路径名字符串。
longgetTotalSpace()返回此抽象路径名指定的分区大小。
longgetUsableSpace()返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
inthashCode()计算此抽象路径名的哈希码。
booleanisAbsolute()测试此抽象路径名是否为绝对路径名。
booleanisDirectory()测试此抽象路径名表示的文件是否是一个目录。
booleanisFile()测试此抽象路径名表示的文件是否是一个标准文件。
booleanisHidden()测试此抽象路径名指定的文件是否是一个隐藏文件。
longlastModified()返回此抽象路径名表示的文件最后一次被修改的时间。
longlength()返回由此抽象路径名表示的文件的长度。
String[]list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
String[]list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[]listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
File[]listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[]listFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[]listRoots()列出可用的文件系统根。
booleanmkdir()创建此抽象路径名指定的目录。
booleanmkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
booleanrenameTo(File dest)重新命名此抽象路径名表示的文件。
booleansetExecutable(boolean executable)设置此抽象路径名所有者执行权限的一个便捷方法。
booleansetExecutable(boolean executable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的执行权限。
booleansetLastModified(long time)设置此抽象路径名指定的文件或目录的最后一次修改时间。
booleansetReadable(boolean readable)设置此抽象路径名所有者读权限的一个便捷方法。
booleansetReadable(boolean readable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的读权限。
booleansetReadOnly()标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
booleansetWritable(boolean writable)设置此抽象路径名所有者写权限的一个便捷方法。
booleansetWritable(boolean writable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的写权限。
StringtoString()返回此抽象路径名的路径名字符串。
URItoURI()构造一个表示此抽象路径名的 file: URI。

操作文件

关于创建File实例的方式,IDEA中main方法,相对位置指的就是以整个项目的根路径作为相对路径起点;而在junit的测试方法中,相对路径指的就是模块位置。路径字符串格式故而无法直接使用\,可使用 \ \(两个\)转义,或是`` 作为路径分隔符,在跨系统时也可以使用 File.separator自动决定路径分隔符。

        //将文件封装为一个File类的对象:
        File f = new File("IOStream/src/testfile/test.txt");
        File f1 = new File("D:\\JAVA_FILE\\IntelliJ\\JStudy\\IOStream\\src\\testfile\\test.txt");
        File f2 = new File("IOStream\\src\\testfile\\test.txt");
        //File.separator属性帮我们获取当前操作系统的路径拼接符号
        //在windows,dos下,系统默认用“\”作为路径分隔符 ,在unix,url中,使用“/”作为路径分隔符。
//建议使用这种
        File f3 = new File("IOStream"+ File.separator+"src"+ File.separator+"testfile"+ File.separator+"test.txt");//建议使用这种
文件属性相关
public class Testfile {
    public static void main(String[] args) throws IOException {
        //将文件封装为一个File类的对象:
        File f = new File("IOStream/src/testfile/test.txt");

        //常用方法:
        System.out.println("文件是否可读:"+f.canRead()); //文件是否可读:true
        System.out.println("文件是否可写:"+f.canWrite()); //文件是否可写:true
        System.out.println("文件的名字:"+f.getName()); //文件的名字:test.txt
        System.out.println("上级目录:"+f.getParent()); //上级目录:IOStream\src\testfile
        System.out.println("是否是一个目录:"+f.isDirectory()); //是否是一个目录:false
        System.out.println("是否是一个文件:"+f.isFile()); //是否是一个文件:true
        System.out.println("是否隐藏:"+f.isHidden()); //是否隐藏:false
        System.out.println("文件的大小:"+f.length()); //文件的大小:16
        System.out.println("是否存在:"+f.exists()); //是否存在:true

    }
}
文件路径相关
public class Testfile {
    public static void main(String[] args) throws IOException {
        //将文件封装为一个File类的对象:
        File f = new File("IOStream/src/testfile/test.txt");
        File f1 = new File("IOStream/src/testfile/test.txt");
        File f2 = new File("D:\\JAVA_FILE\\IntelliJ\\JStudy\\IOStream\\src\\testfile\\test.txt");
        System.out.println(f == f1);//比较两个对象的地址
        System.out.println(f.equals(f1));//比较两个对象对应的文件的路径
        System.out.println(f.equals(f2));//比较两个对象对应的文件的路径
        //跟路径相关的:
        //绝对路径指的就是:真实的一个精准的,完整的路径
        System.out.println("绝对路径:"+f.getAbsolutePath());//绝对路径:D:\JAVA_FILE\IntelliJ\JStudy\IOStream\src\testfile\test.txt
        //相对路径:有一个参照物,相对这个参照物的路径。
        System.out.println("相对路径:"+f.getPath()); //相对路径:IOStream\src\testfile\test.txt
        //toString的效果永远是  相对路径
        System.out.println("toString:"+f.toString()); //toString:IOStream\src\testfile\test.txt
    }
}

文件创建
public class Testfile {
    public static void main(String[] args) throws IOException {
        File f = new File("IOStream\\src\\testfile\\demo.txt");
        boolean flag = f.exists();
        if(!flag){//如果文件不存在,就创建文件
            f.createNewFile();
            System.out.println("chuanjian1");
        }

       if(f.exists()){//如果文件存在,将文件删除
            f.delete();
        }
        System.out.println("绝对路径:"+f.getAbsolutePath());
        System.out.println("相对路径:"+f.getPath());

        File f2 = new File("IOStream\\src\\testfile\\de\\mo\\demo.txt");
        f2.createNewFile();//Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
    }
}

操作目录

目录属性
public class Testdir {
    public static void main(String[] args) {
        //将目录封装为File类的对象:
        File f = new File("IOStream/src/testfile");
        System.out.println("目录是否可读:"+f.canRead());
        System.out.println("目录是否可写:"+f.canWrite());
        System.out.println("目录的名字:"+f.getName());
        System.out.println("上级目录:"+f.getParent());
        System.out.println("是否是一个目录:"+f.isDirectory());
        System.out.println("是否是一个文件:"+f.isFile());
        System.out.println("是否隐藏:"+f.isHidden());
        System.out.println("目录的大小:"+f.length());
        System.out.println("是否存在:"+f.exists());
        System.out.println("绝对路径:"+f.getAbsolutePath());
        System.out.println("相对路径:"+f.getPath());
        System.out.println("toString:"+f.toString());
    }
}
目录创建
public class Testdir {
    public static void main(String[] args) {
        File f = new File("IOStream/src/testfile"); 
        //创建目录:
        File f2 = new File("IOStream/src/testfile/a"); 
        System.out.println(f2.mkdir());// true 单层目录
        File f3 = new File("IOStream/src/testfile/a/b/c"); 
        System.out.println(f3.mkdirs());// true 多层目录
        /*删除:如果是删除目录的话,只会删除一层
        并且前提:这层目录是空的,里面没有内容,如果内容就不会被删除*/
        System.out.println(f3.delete());// true
    }
}
目录遍历
public class ListDir {
    public static void main(String[] args) {
        //查看:
        File f = new File("IOStream/src/testfile");
        String[] list = f.list();//文件夹下目录/文件对应的名字的数组
        for(String s:list){
            System.out.println(s);
/*            a
            demo.java
            test.txt*/
        }
        System.out.println("----------------");
        File[] files = f.listFiles();//作用更加广泛
        for(File file:files){
            System.out.println(file.getName()+","+file.getAbsolutePath());
/*            a,D:\JAVA_FILE\IntelliJ\JStudy\IOStream\src\testfile\a
            demo.java,D:\JAVA_FILE\IntelliJ\JStudy\IOStream\src\testfile\demo.java
            test.txt,D:\JAVA_FILE\IntelliJ\JStudy\IOStream\src\testfile\test.txt*/
        }
        System.out.println("----------------");
        //使用 FilenameFilter接口lambda形式选择指定格式文件
        File[] fileName = f.listFiles(name -> name.getName().endsWith(".java"));
        for(File file:fileName){
            System.out.println(file.getName()); //demo.java
        }
    }
}

热门文章

暂无图片
编程学习 ·

exe4j详细使用教程(附下载安装链接)

一、exe4j介绍 ​ exe4j是一个帮助你集成Java应用程序到Windows操作环境的java可执行文件生成工具,无论这些应用是用于服务器,还是图形用户界面(GUI)或命令行的应用程序。如果你想在任务管理器中及Windows XP分组的用户友好任务栏…
暂无图片
编程学习 ·

AUTOSAR从入门到精通100讲(126)-浅谈车载充电系统通信方案

01 引言 本文深入研究车载充电系统策略,设计出一套基于电动汽车电池管理系统与车载充电机的CAN通信协议,可供电动汽车设计人员参考借鉴。 02 电动汽车充电系统通讯网络 电动汽车整车控制系统中采用的是CAN总线通信方式,由一个整车内部高速CAN网络、内部低速CAN网络和一个充电…
暂无图片
编程学习 ·

CMake(九):生成器表达式

当运行CMake时,开发人员倾向于认为它是一个简单的步骤,需要读取项目的CMakeLists.txt文件,并生成相关的特定于生成器的项目文件集(例如Visual Studio解决方案和项目文件,Xcode项目,Unix Makefiles或Ninja输入文件)。然…
暂无图片
编程学习 ·

47.第十章 网络协议和管理配置 -- 网络配置(八)

4.3.3 route 命令 路由表管理命令 路由表主要构成: Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低Genmask:目标网络对应的netmaskIface: 到达对应网络,应该从当前主机哪个网卡发送出来Gateway: 到达非直连的网络,…
暂无图片
编程学习 ·

元宇宙技术基础

请看图: 1、通过AR、VR等交互技术提升游戏的沉浸感 回顾游戏的发展历程,沉浸感的提升一直是技术突破的主要方向。从《愤怒的小鸟》到CSGO,游戏建模方式从2D到3D的提升使游戏中的物体呈现立体感。玩家在游戏中可以只有切换视角,进而提升沉浸…
暂无图片
编程学习 ·

flink的伪分布式搭建

一 flink的伪分布式搭建 1.1 执行架构图 1.Flink程序需要提交给 Job Client2.Job Client将作业提交给 Job Manager3.Job Manager负责协调资源分配和作业执行。 资源分配完成后,任务将提交给相应的 Task Manage。4.Task Manager启动一个线程以开始执行。Task Manage…
暂无图片
编程学习 ·

十进制正整数与二进制字符串的转换(C++)

Function one: //十进制数字转成二进制字符串 string Binary(int x) {string s "";while(x){if(x % 2 0) s 0 s;else s 1 s;x / 2;}return s; } Function two: //二进制字符串变为十进制数字 int Decimal(string s) {int num 0, …
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统: 微信小程序——辩论管理前台涉及技术:WXML 和 WXS…
暂无图片
编程学习 ·

树莓派驱动DHT11温湿度传感器

1,直接使用python库 代码如下 import RPi.GPIO as GPIO import dht11 import time import datetimeGPIO.setwarnings(True) GPIO.setmode(GPIO.BCM)instance dht11.DHT11(pin14)try:while True:result instance.read()if result.is_valid():print(ok)print(&quo…
暂无图片
编程学习 ·

ELK简介

ELK简介 ELK是三个开源软件的缩写,Elasticsearch、Logstash、Kibana。它们都是开源软件。不过现在还新增了一个 Beats,它是一个轻量级的日志收集处理工具(Agent),Beats 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstas…
暂无图片
编程学习 ·

Linux 基础

通常大数据框架都部署在 Linux 服务器上,所以需要具备一定的 Linux 知识。Linux 书籍当中比较著名的是 《鸟哥私房菜》系列,这个系列很全面也很经典。但如果你希望能够快速地入门,这里推荐《Linux 就该这么学》,其网站上有免费的电…
暂无图片
编程学习 ·

Windows2022 无线网卡装不上驱动

想来 Windows2022 和 windows10/11 的驱动应该差不多通用的,但是死活装不上呢? 搜一下,有人提到 “默认安装时‘无线LAN服务’是关闭的,如果需要开启,只需要在“添加角色和功能”中,选择开启“无线LAN服务…
暂无图片
编程学习 ·

【嵌入式面试宝典】版本控制工具Git常用命令总结

目录 创建仓库 查看信息 版本回退 版本检出 远程库 Git 创建仓库 git initgit add <file> 可反复多次使用&#xff0c;添加多个文件git commit -m <message> 查看信息 git status 仓库当前的状态git diff 差异对比git log 历史记录&#xff0c;提交日志--pret…
暂无图片
编程学习 ·

用Postman生成测试报告

newman newman是一款基于nodejs开发的可以运行postman脚本的工具&#xff0c;使用Newman&#xff0c;可以直接从命令运行和测试postman集合。 安装nodejs 下载地址&#xff1a;https://nodejs.org/en/download/ 选择自己系统相对应的版本内容进行下载&#xff0c;然后傻瓜式安…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…