Java基础---IO编程(文件操作类File)

本文详细介绍了Java中的File类,包括基本使用、文件目录操作、获取文件信息、获取文件目录信息以及文件更名。通过实例展示了如何创建、删除、检查文件及其目录,并获取文件的修改日期和大小。此外,还讨论了如何遍历目录下的所有文件和子目录。最后,提到了文件的重命名功能。
摘要由CSDN通过智能技术生成

Java基础—IO编程(文件操作类File)


File类

File类基本使用

  File类是在整个java.io包里面唯一一个与文件本身有关的操作类,可以进行操作文件的路径指派、创建文件、删除文件,获取文件想关的内容,File类中有如下几个常用的方法

No.方法名称类型描述
1public File(String pathname)构造方法设置要操作的文件完整路径
2public File(File parent,String child)构造方法设置要操作文件的父目录与子文件路径
3public boolean creatNewFile()throws IOException方法创建一个新的文件
4public boolean delete()方法删除文件
5public boolean exists()方法判断文件是否存在

使用上述的File类中的方法实现文件的创建与删除操作。

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

public class Test01{
    public static void main(String[] args) throws IOException{
        File file = new File("d:\\zhangdapao.txt");
        if(file.exists()){
            System.out.println("文件存在");
            file.delete();
        }else{
            System.out.println("文件不存在");
            file.createNewFile();
        }
    }
}


执行结果:D:\java\jdk-11\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2018.3.2\lib\idea_rt.jar=61086:D:\IDEA\IntelliJ IDEA 2018.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\JavaTest\out\production\Test01 zhang.da.pao.Test01
文件不存在
创建成功

Process finished with exit code 0


在这里插入图片描述
  代码运行前d盘里面没有txt文件,上述代码运行完成后在d盘中创建了zhangdapao.txt文件,创建文件成功,再运行一次代码,查看删除情况:


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

public class Test01{
    public static void main(String[] args) throws IOException{
        File file = new File("d:\\zhangdapao.txt");
        if(file.exists()){
            System.out.println("文件存在");
            while(file.delete()){
                System.out.println("删除成功");
            }
        }else{
            System.out.println("文件不存在");
            while(file.createNewFile()){
                System.out.println("创建成功");
            }
        }
    }
}


执行结果:D:\java\jdk-11\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2018.3.2\lib\idea_rt.jar=61100:D:\IDEA\IntelliJ IDEA 2018.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\JavaTest\out\production\Test01 zhang.da.pao.Test01
文件存在
删除成功

Process finished with exit code 0

  此时我们就可以轻松的在指定的位置实现文件的创建和删除操作啦,但从刚开始学学习Java的时候我们就知道了Java采用的是跨品台的编程模式,所以我们需要考虑不同系统的路径问题:windows路径分隔符“\”;Unix、Linux路径分隔符“/”,为了统一分隔符的使用问题,File类中提供了一个常量,定义如下:

public static final String separator;

将上述文件删除和创建代码种的分隔符使用常量“separator”来定义:

File file = new File("d:"+File.separator+"zhangdapao.txt");

文件目录操作

  当前程序是在d盘进行文件的创建操作,但在很多情况下需要在一些子目录中进行文件的创建,那么在java.io包里,必须保证有父目录的情况下才可以创建文件。如果想要进行目录创建,需要使用File类中的几个方法:

No.方法名称类型描述
1public boolean mkdir()方法只创建单级目录
2public boolean mkdirs()方法创建多级目录
3public String getParent()方法获取父路径信息
4public File getParent()方法获取父路径的File实例

使用上述方法实现父路径的创建操作:


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

public class Test01{
   public static void main(String[] args) throws IOException{
       File file = new File("d:"+File.separator+"zhang"+File.separator+"da"+File.separator+"pao.txt");
       if(!file.getParentFile().exists()){
           System.out.println("父路不径存在");
           while(file.getParentFile().mkdirs()){
               System.out.println("创建父路径");
           }
       }
       if(file.exists()){
           System.out.println("文件存在");
       }else{
           System.out.println("文件不存在");
           while(file.createNewFile()) {
               System.out.println("创建文件成功");
           }
       }
   }
}

执行结果:D:\java\jdk-11\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2018.3.2\lib\idea_rt.jar=53000:D:\IDEA\IntelliJ IDEA 2018.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\JavaTest\out\production\Test01 zhang.da.pao.Test01
父路不径存在
创建父路径
文件不存在
创建文件成功

Process finished with exit code 0

  上述代码已经实现了目录下的文件创建,其中包括了一个判断父路径是否存在的语句“if(!file.getParentFile().exists())”,再多线程中,多个线程并发执行代码,判断语句会多次执行,选用静态代码块实现语句,只要判断一次即可,优化代码效率。实现方式如下:


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

public class Test01{
    private static File file = new File("d:"+File.separator+"zhang"+File.separator+"da"+File.separator+"pao.txt");
    static{
        if(!file.getParentFile().exists()){
            System.out.println("父路不径存在");
            while(file.getParentFile().mkdirs()){
                System.out.println("创建父路径");
            }
        }
    }
    public static void main(String[] args) throws IOException{
        if(file.exists()){
            System.out.println("文件存在");
        }else{
            System.out.println("文件不存在");
            while(file.createNewFile()) {
                System.out.println("创建文件成功");
            }
        }
    }
}

获取文件信息

  在File类中除了提供有基本的创建删除操作外,还存在其他的操作信息,方法如下:

No.方法名称类型描述
1public boolean canExecute()方法是否能执行
2public boolean canRead()方法是否能读
3public boolean canWrite()方法是否能写
4public File getAbsoluateFile()方法获取文件绝对路径实例
5public String getName()方法获取文件或路径名称
6public boolean isDirectory()方法当前路径是否为目录
7public boolean isFile()方法当前路径是否为文件
8public long lastModified()方法最后一次的修改日期
9public long length()方法获取文件长度

  File类中的返回日期long,返回的是毫秒数、文件返回的是字节数,所以数字大小巨大需要使用long型。下例实现输出文件修改日期和文件大小操作。

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

public class Test01{

    public static void main(String[] args) throws IOException{
        File file = new File("d:"+File.separator+"zhang"+File.separator+"da"+File.separator+"pao.txt");
        System.out.println("文件修改日期" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(file.lastModified())));
        System.out.println(String.format("文件大小%5.2f",(file.length()/(double)1024/1024)));
    }
}

执行结果:D:\java\jdk-11\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2018.3.2\lib\idea_rt.jar=61304:D:\IDEA\IntelliJ IDEA 2018.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\JavaTest\out\production\Test01 zhang.da.pao.Test01
文件修改日期2021-04-02 16:14:22.592
文件大小 0.00

Process finished with exit code 0

获取文件目录信息

  使用File可以实现文件或目录的操作,但文件中存在子目录,File中还存在对目录中所有子目录和文件的操作方法:

No.方法名称类型描述
1public String[] list()方法描述的是子路径信息(不包含父目录)
2public File[] listFiles()方法列出所有路径信息(File对象数组)

下面让我们观察list()方法的使用

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class Test01{

    public static void main(String[] args) throws IOException {
        File file = new File("d:"+File.separator);
        System.out.println(Arrays.toString(file.list()));
    }
}

执行结果:[d:\$RECYCLE.BIN, .temp, 320722199612241211.jpeg, 360, 360Downloads,....

  程序运行后会列出当前路径下的所有子路径信息,子路径信息可能是一个文件或一个目录。

  使用listFiles()可以列出完整的路径

//listFiles
import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class Test01{

    public static void main(String[] args) throws IOException {
        File file = new File("d:"+File.separator);
        System.out.println(Arrays.toString(file.listFiles()));
    }
}

执行结果:[d:\$RECYCLE.BIN, d:\.temp, d:\320722199612241211.jpeg, d:\360, d:\360Downloads,....

  当前的代码可以实现将d盘种的所有目录输出,但这些目录下还有可能存在子目录,我们使用listFiles()方法,递归的把所有目录完整输出,代码如下:

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class Test01{

    public static void main(String[] args) throws IOException {
        File file = new File("d:"+File.separator);
        listDir(file);

        System.out.println(Arrays.toString(file.listFiles()));
    }
    public static void listDir(File file){
        if(file.isDirectory()){
            File result [] = file.listFiles();
            if(result!=null){
                for(int x = 0;x < result.length;x++){
                    listDir(result[x]);
                }
            }
        }else{
            System.out.println(file);
        }
    }
}

  这样处理文件非常方便,但一定要慎用,如果把输出文件换成如下的代码:这样你的d盘就会递归的删除,眼睁睁看着磁盘清空,这样就Re0了,一定要慎用。

file.delete();

文件更名

还有一个常用的方法,实现文件的更名处理。

public boolean renameTo(File dest);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值