一、概述

  java.io.File 类是文件目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

  File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法。

     File 是文件和目录路径名的抽象表示形式,即File类的对象代表一个文件或一个目录(文件夹)的路径,而不是文件本身。

  File 类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。

  路径问题

    绝对路径:从盘符开始的路径,这是一个完整的路径。如:E:\\a.txt

    相对路径:相当于项目目录的路径,这个一个便捷的路径。如:../a.txt

  注意

    1. 路径不区分大小写

    2. 路径中的文件名称分隔符 window 使用反斜杠(\)也支持斜杠(/),反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠

    3. 其他的平台都使用斜杠作为分隔符(/),网络地址也是(http://www.baidu.com)。

    4. window 的路径分隔符使用“\”,而Java程序中的“\”表示转义字符,所以在Windows中表示路径,需要用“\\”。或者直接使用“/”也可以,Java程序支持将“/”当成平台无关的路径分隔符。或者直接使用File.separator常量值表示。

    5. 路径中如果出现 “..” 表示上一级目录,路径名如果以“/”开头,表示从“根目录”下开始导航。

二、构造方法

  1、方式一

public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

    注意

      ① String pathname: 代表字符串的路径名称

      ② 路径可以是文件结尾,也可以是文件夹结尾

      ③ 路径可以是相对路径,也可以绝对路径

      ④ 路径可以是存在,也可以是不存在

      ⑤ 创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况

    Demo:

 File f1 = new File("E:\\a.txt");
System.out.println(f1); // E:\\a.txt File f2 = new File("a.txt");
System.out.println(f2); // a.txt

    可以看出 File 这个类里面重写了 Object 类的 toString 方法。

  2、方式二

public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。

    参数:把路径分为了两部分

      String parent:父路径

      String child:子路径

     优点:父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化

    Demo:

 File file = new File("C:\\","a.txt");
System.out.println(file); //c:\a.txt

  3、方式三

public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

    参数:把路径分成两部分

       File parent:父路径

      String child:子路径

     优点

      ① 父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化

      ② 父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象

    Demo:

 File parent = new File("c:\\");
File file = new File(parent,"hello.java");
System.out.println(file);//c:\hello.java

    注意

    ① 一个 File 对象代表硬盘实际存在一个文件或者目录。

    ② 无论该路径下是否存在文件或者目录,都不影响 File 对象的创建。

  4、方式四

public File(URI uri):通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

  

三、File类中的字段信息

  File 类中提供了四个类常量:

public static final char separatorChar:与系统有关的默认名称分隔符。此字段被初始化为包含系统属性 file.separator 值的第一个字符。
                         在 UNIX 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\\'。
public static final String separator:与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。此字符串只包含一个字符,即 separatorChar。
public static final char pathSeparatorChar:与系统有关的路径分隔符。此字段被初始为包含系统属性 path.separator 值的第一个字符。
                           此字符用于分隔以路径列表 形式给定的文件序列中的文件名。在 UNIX 系统上,此字段为 ':';在 Microsoft Windows 系统上,它为 ';'。
public static final String pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串。此字符串只包含一个字符,即 pathSeparatorChar。

  Demo:

 1       String pathSeparator = File.pathSeparator;
//System.out.println(pathSeparator);//路径分隔符 windows:分号; linux:冒号: String separator = File.separator;
//System.out.println(separator);// 文件名称分隔符 windows:反斜杠\ linux:正斜杠/ System.out.println(File.separator); // \
System.out.println(File.separatorChar); // \
System.out.println(File.pathSeparator); // ;
System.out.println(File.pathSeparatorChar); // ;

四、常用方法

  (1)获取文件或目录的详细信息

String getName():     返回由此抽象路径名表示的文件或目录的名称。
long length() : 返回由此抽象路径名表示的文件的长度。(只能返回文件大小,不能直接返回目录大小)
boolean exists() : 测试此抽象路径名表示的文件或目录是否存在。
boolean isHidden() : 测试此抽象路径名指定的文件是否是一个隐藏文件。
boolean canRead() : 测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite() : 测试应用程序是否可以修改此抽象路径名表示的文件
long lastModified() : 返回此抽象路径名表示的文件最后一次被修改的时间。(毫秒值)
String toString() : 返回此抽象路径名的路径名字符串。
boolean isAbsolute(): 测试File对象对应的文件或目录是否是绝对路径。
String getParent() : 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。(返回父目录名称)
File getParentFile() :返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。(返回父目录的File对象)

    注意:以上都是对应于 File 对象的属性信息,如果File对象是一个不存在的文件或目录,返回的都是对应属性的默认值,例:获取的length()为0,isFile()为False等, name,path这些都是有值的,因为这些属性是通过构造方法创建 File 时指定的,而其他的属性都是默认值。

  (2)获取文件或目录的路径

String getPath() : 将此抽象路径名转换为一个路径名字符串。
File getAbsoluteFile() : 返回此抽象路径名的绝对路径名形式。
String getAbsolutePath():返回此抽象路径名的绝对路径名字符串。 返回绝对路径,从根目录开始导航
File getCanonicalFile(): 返回此抽象路径名的规范形式。
String getCanonicalPath() :返回此抽象路径名的规范路径名字符串。规范路径就是路径里没有./或../或/,会把这些自动解析

  (3)操作文件或目录

boolean createNewFile():当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。(只创建文件)
boolean delete(): 删除此抽象路径名表示的文件或目录。(可以删除文件或删除空目录)删除成功,返回true,失败false。
boolean equals(Object obj):测试此抽象路径名与给定对象是否相等。
boolean mkdir() : 创建此抽象路径名指定的目录。(只能创建一级目录)必须确保父目录存在,否则创建失败。
boolean mkdirs(): 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 (可以创建多级目录)如果父目录不存在,会一同创建父目录
boolean renameTo(File dest) :重新命名此抽象路径名表示的文件。(可以给文件或目录重命名)

  (4)判断是文件还是目录

boolean isFile() :测试此抽象路径名表示的文件是否是一个标准文件。
boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。

  (5)获取目录的下一级

String[] list() :返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
File[] listFiles() :返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。(获取下一级的文件/目录的File对象)
static File[] listRoots():列出可用的文件系统根。

  

  1、获取功能的方法

    a、获取绝对路径名

public String getAbsolutePath() :返回此File的绝对路径名字符串。

     获取的是构造方法中传递的路径,无论路径是绝对的还是相对的,getAbsolutePath方法返回的都是绝对路径

    Demo:

 File f1 = new File("E:\\a.txt");
String absolutePath2 = f1.getAbsolutePath();
System.out.println(absolutePath); // E:\\a.txt File f2 = new File("a.txt");
String absolutePath2 = f2.getAbsolutePath();
System.out.println(absolutePath); // E:\\a.txt

    b、获取路径名

public String getPath() :将此File转换为路径名字符串。

      获取的构造方法中传递的路径,File 类中的 toString方法调用的 getPath 方法      

     Demo:

  File f1 = new File("E:\\java\\a.txt");
File f2 = new File("a.txt");
String path1 = f1.getPath();
System.out.println(path1); // E:\java\a.txt
String path2 = f2.getPath();
System.out.println(path2); //a.txt

    c、获取文件或目录名称

public String getName()  :返回由此File表示的文件或目录的名称。

    获取的就是构造方法传递路径的结尾部分(文件/文件夹)  

     Demo:

 File f1 = new File("E:\\java\\a.txt");
String name1 = f1.getName();
System.out.println(name1); //a.txt File f2 = new File("E:\\java");
String name2 = f2.getName();
System.out.println(name2); // java

    d、获取文件长度

public long length()  :返回由此File表示的文件的长度。

     获取的是构造方法指定的文件的大小,以字节为单位。

     注意:

        ①  文件夹是没有大小概念的,不能获取文件夹的大小

        ②  如果构造方法中给出的路径不存在,那么length方法返回0

    Demo:

 File f1 = new File("E:\\java\\a\\1.jpg");   // 该文件存在
long l1 = f1.length();
System.out.println(l1);//78831字节 File f2 = new File("E:\\java\\a\\2.jpg"); // 该文件不存在
System.out.println(f2.length());// File f3 = new File("E:\\java\\a"); // a 为一个文件夹
System.out.println(f3.length());//0 文件夹没有大小概念的

  2、判断功能的方法

      a、判断文件或目录是否存在

public boolean exists() :此File表示的文件或目录是否实际存在。

      用于判断构造方法中的路径是否存在,存在为 true;不存在为 false

        Demo:

  File f1 = new File("E:\\java\\aaa\\bbb");
System.out.println(f1.exists());//true File f2 = new File("E:\\java\\aaa\\bb"); // 该路径不存在
System.out.println(f2.exists());//false File f3 = new File("a.txt"); //相对路径 E:\java\a\a.txt
System.out.println(f3.exists());//true File f4 = new File("a.txt"); // 该文件不存在
System.out.println(f4.exists());//false

      b、File 表示的是否为目录

public boolean isDirectory() :此File表示的是否为目录。

      用于判断构造方法中给定的路径是否以文件夹结尾。 是:true; 否:false  

      注意:使用该方法前提,路径必须是存在的,否则都返回false,与下面方法互斥

      c、File 表示的是否为文件

public boolean isFile() :此File表示的是否为文件。

      用于判断构造方法中给定的路径是否以文件结尾。是:true;否:false

       注意:使用该方法前提,路径必须是存在的,否则都返回false,与上面方法互斥

       Demo:

 File f1 = new File("E:\\java\\aaa\\bbb");

   //不存在,就没有必要获取
  if(f1.exists()){
  System.out.println(f1.isDirectory());
  System.out.println(f1.isFile());
  } File f2 = new File("E:\\java\\aaa\\bbb");
  if(f2.exists()){
System.out.println(f2.isDirectory());//true
System.out.println(f2.isFile());//false
} File f3 = new File("E:\\java\\aaa\\bbb\\a.txt");
if(f3.exists()){
System.out.println(f3.isDirectory());//false
System.out.println(f3.isFile());//true
}

  3、创建删除功能的方法

    a、创建文件

public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

    创建文件的路径和名称在构造方法中给出(构造方法的参数)

    返回值:布尔值;true:文件不存在,创建文件,返回 true;false:文件存在,不会创建,返回 false;

    注意

      ① 此方法只能创建文件,不能创建文件夹

      ② 创建文件的路径必须存在,否则会抛出异常

    Demo:

  File f1 = new File("E:\\java\\aaa\\bbb\\a.txt");
boolean b1 = f1.createNewFile();
System.out.println("b1:"+b1); // true 成功创建 File f2 = new File("bbb\\2.txt");
System.out.println(f2.createNewFile()); File f3 = new File("bbb\\新建文件夹");
System.out.println(f3.createNewFile()); //创建的是一个文件,不是文件夹,不要被名称迷糊,要看类型 File f4 = new File("abc\\3.txt");
System.out.println(f4.createNewFile()); //路径不存在,抛出IOException

    b、删除文件或者目录

public boolean delete() :删除由此File表示的文件或目录。

      创建单级文件夹

       创建文件夹的路径和名称在构造方法中给出(构造方法的参数)

       返回值

        true:文件夹不存在,创建文件夹;

        false:文件夹存在,不会创建,构造方法中给出的路径不存在也会返回 false

        注意:此方法只能创建文件夹,不能创建文件

    c、创建单个目录

public boolean mkdir() :创建由此File表示的目录。

      既可以创建单级文件夹,也可以创建多级文件夹

        创建文件夹的路径和名称在构造方法中给出(构造方法的参数)

      返回值

        true:文件夹不存在,创建文件夹;

        false:文件夹存在,不会创建,构造方法中给出的路径不存在也会返回 false

       注意:此方法只能创建文件夹,不能创建文件

      Demo:

  File f1 = new File("java\\aaa\\aa");
boolean b1 = f1.mkdir();
System.out.println("b1:"+b1); // true File f2 = new File("java\\111\\222\\333\\444");
boolean b2 = f2.mkdirs();
System.out.println("b2:"+b2); // true File f3 = new File("java\\abc.txt");
boolean b3 = f3.mkdirs(); //看类型,是一个文件
System.out.println("b3:"+b3); File f4 = new File("jav\\ccc");
boolean b4 = f4.mkdirs(); //不会抛出异常,路径不存在,不会创建
System.out.println("b4:"+b4);

    d、创建文件或目录

public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

    该方法删除构造方法路径中给出的文件 / 文件夹

    返回值

      true:文件 / 文件夹删除成功,返回 true

      false:文件夹中有内容,不会删除返回 false;构造方法中路径不存在false

    注意

      ① delete方法是直接在硬盘删除文件/文件夹,不走回收站,删除要谨慎

      ② delete方法,如果此File表示目录,则目录必须为空才能删除。

    Demo:

 File f1 = new File("java\\新建文件夹");
boolean b1 = f1.delete();
System.out.println("b1:"+b1); File f2 = new File("java\\abc.txt");
System.out.println(f2.delete());

    扩展:创建临时文件,通常结合 deleteOnExit() 使用

public static File createTempFile(String prefix,String suffix) throws IOException在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。调用此方法等同于调用 createTempFile(prefix, suffix, null)。
public static File createTempFile(String prefix,String suffix,File directory)throws IOException在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。

      prefix:用于生成文件名的前缀字符串:必须至少三个字符。

       suffix:用于生成文件名的后缀字符串:如果为 null,默认为 “.tmp”

       directory:将创建的文件所在的目录;如果使用默认临时文件目录,则该参数为 null

public void deleteOnExit():当退出JVM时,删除文件,一般用于删除临时文件

      Demo:

   @Test
public void test() throws IOException{
File tempFile = File.createTempFile("Hello", ".tmp");
//....省略代码
tempFile.deleteOnExit();
}

五、目录的遍历

  File 类遍历(文件夹)目录功能

public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

   注意

    ① list 方法和 listFiles 方法遍历的是构造方法中给出的目录

    ② 如果构造方法中给出的目录的路径不存在,会抛出空指针异常

    ③ 如果构造方法中给出的路径不是一个目录,也会抛出异常。

    ④ 调用listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历

  Demo:

  /*
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
遍历构造方法中给出的目录,会获取目录中所有的文件/文件夹,把文件/文件夹封装为File对象,多个File对象存储到File数组中
*/
/*
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
遍历构造方法中给出的目录,会获取目录中所有文件/文件夹的名称,把获取到的多个名称存储到一个String类型的数组中
*/   public void listSubFiles(File dir) {
if (dir != null && dir.isDirectory()) {
File[] listFiles = dir.listFiles();
if (listFiles != null) {
for (File sub : listFiles) {
listSubFiles(sub);
}
}
}
System.out.println(dir);
}

Java 之 File类(文件操作)的更多相关文章

  1. Java IO_001.File类--文件或文件夹相关操作

    Java IO之File对象常用操作 File类:用于文件或文件夹或网址相关联的操作.可以关联或不关联文件(即关联不存在的文件).构造函数有: public File(String pathname) ...

  2. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流

      File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...

  3. java.io.File类操作

    一.java.io.File类 String path="E:/222/aaa";//路径 String path1="aaa.txt"; File file= ...

  4. java学习一目了然——File类文件处理

    java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...

  5. JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile

    Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...

  6. java.io.File类

    java.io.File类 1.凡是与输入.输出相关的类.接口等都定义在java.io包下 2.File是一个类.能够有构造器创建其对象.此对象相应着一个文件(.txt .avi .doc .ppt ...

  7. Java之File类

    一.初见File类 java.io.File类代表系统中的文件(文件或目录) 常用构造方法 File(String pathname) File(String parent, String child ...

  8. java中File类的常用方法总结

    java中File类的常用方法 创建: createNewFile()在指定的路径创建一个空文件,成功返回true,如果已经存在就不创建,然后返回false. mkdir() 在指定的位置创建一个此抽 ...

  9. Java 中File类的createNewFile()与createTempFile(), delete和deleteOnExit区别

    1. Java 中File类的createNewFile()与createTempFile()的区别 最近,在看代码时看到了一个方法, File.createTempFile() ,由此联想到File ...

随机推荐

  1. java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】

    一.概述 三款框架的功能对比 Mybatis-generator 通用Mapper Mybatis-Plus 代码生成器 支持自动生成Model,Mapper,Mapper XML文件 生成方式不够灵 ...

  2. sql 获取某一时段中每一天中最大的时间的一条记录

    SELECT *FROM ( SELECT ROW_NUMBER() OVER( PARTITION BY CONVERT(CHAR(10), DataTime, 120) ORDER BY Data ...

  3. 3D游戏引擎设计 实时计算机图形学的应用方法 第2版 pdf 带索引书签目录

    3D游戏引擎设计  实时计算机图形学的应用方法  第2版 目录 第1章 概述1.1 图形硬件和游戏发展史1.2 本书版本与软件发展史1.3 章节导读 第2章 图形系统2.1 基础知识2.1.1 坐标系 ...

  4. docker build doris-0.11.20-release source code

    1. pull doris dev docker image sudo docker pull apachedoris/doris-dev:build-env-1.1 2. dowload doris ...

  5. PLSQL集合类型的使用总结

    PLSQL集合类型的使用总结 在pl sql 中,集合(collection) 是一组有序的元素组成的对象,这些元素的类型必须一致. pl sql 将collection 分成3 类,分别为Assoc ...

  6. curl命令测试网络请求中DNS解析、响应时间

    https://blog.csdn.net/dreamer2020/article/details/78152576

  7. Input.GetMouseButtonDown 在fixedupdate中会出现丢失问题,在update中则完全没这个问题

    Input.GetMouseButtonDown 在fixedupdate中会出现丢失问题,在update中则完全没这个问题

  8. 详解consul的安装和配置

    Consul 简化了分布式环境中的服务的注册和发现流程,通过 HTTP 或者 DNS 接口发现.支持外部 SaaS 提供者等. consul提供的一些关键特性: service discovery:c ...

  9. velocity 自定义工具类接入

    网上的教程几乎都是同一篇: velocity 自定义工具类 - eggtk - CSDN 博客 但是教程有不完善的地方,我就补充一下. 补充: 引入的jar包和版本要一致.我们项目中因为没有定义确切版 ...

  10. 用php的for循环输出四边形,各种三角形和菱形【含空心版本】

    <?php // 实心版 //四边形 for( $i = 1; $i <=5; $i++ ){ for( $j = 1; $j <=5; $j++ ){ echo '*'; } ec ...