File文件类


首先,区别 文件 和 目录 的概念:目录下可以有若干个文件


1.概述

java.io.File类 ,用于描述文件 和 目录的路径信息;

使用该类可以获取文件的属性信息。如,文件名、文件大小,但是不能够修改文件的内容。

2. 常用方法

构造方法: File(String pathname - 根据参数指定的路径构造File类的对象。

boolean exists()                      - 判断文件/目录是否存在。

String getName()                   - 获取文件/目录的名称。 long length() - 获取文件的长度。

String getAbsolutePath()        - 获取文件的绝对路径信息。

绝对路径 - 以根目录开始的路径,如:C: D: ...
相对路径 - 以当前目录开始的路径,如:./code
. 表示当前目录 .. 表示当前目录的上一级目录
以后的开发中推荐使用相对路径,所有的路径分隔符一律使用 ./。
 

   long      lastModified( )        - 获取文件的最后一次修改时间。

                                              - 返回的是距离1970年1月1日0时0分0秒的毫秒数,与Date的有参构造搭配使用

boolean    createNewFile( )   - 用于创建新的空文件

boolean    mkdir( )                 - 用于创建目录。

boolean   delete( )                - 用于删除文件/目录。

  File[]      listFiles( )              - 获取当前目录中的所有内容(文件和子目录)。

boolean   isDirectory( )        - 判断是否为目录。 boolean isFile() - 判断是否为文件。


代码1:指定路径下的文件存在的情况

前期准备:在  写一个文本 hello.txt文件,文件路径为E:hello.txt   文本内容为: 

package com.monkey1024;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileTest {

    public static void main(String[] args) {
        
        // 创建对象与参数指定的文件建立关联
        File file = new File("E:/hello.txt");   // 形参要的是String类型的 文件路径
        
        // 判断该文件是否存在
        if(file.exists()) {
            
            // 1.文件存在则打印 相关的属性:
            
            
            System.out.println("1.1.打印文件 名称: "+file.getName());
            System.out.println("1.2.打印文件 大小: "+file.length());
            System.out.println("1.3.打印文件 绝对路径: "+file.getAbsolutePath());
            System.out.println();
            
            // 2.获取文件的最后一次修改时间。
            
            System.out.println("2.1.获取文件的最后一次修改时间(毫秒数): "+file.lastModified());
            
            // 使用获取到的毫秒数来构建日期对象
               Date date = new Date(file.lastModified());
               System.out.println("2.2.转换为系统时间: "+date);
               
            // 设置时间输出格式
               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
               String str = sdf.format(date);
               System.out.println("2.3.设置了格式之后的文件最后一次修改时间: "+str);
               
        }

    }

}

结果:

1.1.打印文件 名称: hello.txt
1.2.打印文件 大小: 16
1.3.打印文件 绝对路径: E:hello.txt

2.1.获取文件的最后一次修改时间(毫秒数): 1572335506500
2.2.转换为系统时间: Tue Oct 29 15:51:46 CST 2019
2.3.设置了格式之后的文件最后一次修改时间: 2019-10-29  15:51:46

代码2:创建新的空文件

package com.monkey1024;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileTest {

    public static void main(String[] args) throws IOException {
        
        // 创建对象与参数指定的文件建立关联
        File file = new File("E:/HelloWorld.java");   // 形参要的是String类型的 文件路径
        
        // 判断该文件是否存在
        if(file.exists()) {
            
            // 删除存在的文件 
            boolean b = file.delete();
            
            System.out.println("文件是否删除成功: "+b);
               
        }else {
            
            // 若不存在,则创建新的空文件
            boolean b = file.createNewFile();
            
            System.out.println("新的空文件是否创建成功: "+b);
            
            
            
        }

    }

}

结果:

新的空文件是否创建成功: true

代码3:

package com.monkey1024;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileTest {

    public static void main(String[] args) throws IOException {
        
        // 创建对象与参数指定的 目录建立关联
        File file = new File("E:\测试文件夹");   
        
        // 获取目录中的所有内容,打印每个内容
        File[] fs = file.listFiles();
        
        for (File f : fs) {
            
            // 判断 是文件 还是 目录,若是文件 则直接打印 文件名称
            if(f.isFile()) {
                System.out.println("打印文件名称: "+f.getName());
                
            }
            
            // 若是 目录,则打印文件名的同时,使用[]把名称括起来
            if(f.isDirectory()) {
                System.out.println("打印目录名称: "+"["+f.getName()+"]");
            }
            
        }
     

    }

}

结果:

打印文件名称: 01001.rtf
打印文件名称: 01001.xlsx
打印文件名称: 01002.xlsx
打印文件名称: 01hello.java
打印文件名称: 01test001.txt
打印目录名称: [01第一个]
打印目录名称: [01第三个]
打印目录名称: [01第二个]
打印目录名称: [01第四个]

存在一个问题:

     这样的代码只能打印 第一层 的 文件 名称 和 目录名称


思考?  如何打印出 指定目录中的内容,并且将子目录中的内容也要打印出来

要求:

1.若关联的是 普通文件,则直接打印文件名即可

2. 若关联的是目录文件。则打印目录名的同时使用 [ ]括起来

package com.monkey1024;

import java.io.File;
import java.io.IOException;
public class FileTest {
    public static void dirPrint(File file) {
        
        // 1.若关联的是 普通文件,则直接打印文件名即可

        if(file.isFile()) {
            System.out.println("打印文件名: "+file.getName());
            
        }
        
        // 2. 若关联的是目录文件。则打印目录名的同时使用 [ ]括起来
        if(file.isDirectory()) {
            System.out.println("打印目录名: "+"["+file.getName()+"]");
            
            // 3.获取该目录中的所有文件,分别打印
            File[] files = file.listFiles();
            for (File f : files) {
                dirPrint(f);   //方法自己调用自己
            }                
        }
    }

    public static void main(String[] args) throws IOException {
        
        
        File file = new File("E:\测试文件夹");
        
        // 本类中,静态方法的调用
        dirPrint(file);
}

}

结果:

打印目录名: [测试文件夹]
打印文件名: 01001.rtf
打印文件名: 01001.xlsx
打印文件名: 01002.xlsx
打印文件名: 01hello.java
打印文件名: 01test001.txt
打印目录名: [01第一个]
打印目录名: [01第三个]
打印目录名: [01第二个]
打印文件名: 02BOB.bmp
打印文件名: 02成龙.mp4
打印目录名: [01第四个]
打印目录名: [02孙子文件夹]
打印文件名: 03我是孙孙子文本.txt
打印文件名: 02李连杰.mp4

原文地址:https://www.cnblogs.com/penguin1024/p/11759725.html