Java IO 1-IO概念与FILE文件操作类

本文详细介绍了Java IO操作中的File类,包括其构造方法、文件及目录的基本操作、如何获取文件信息等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. IO概念

JavaIO操作的核心是五个抽象类和一个接口,所有的IO操作其实都是在操作这些类和接口,他们分别是:
- FILE文件操作类
- OutputStream字节输出流
- InputStream字节输入流
- Reader字符输入流
- Writer字符输出流
- Serializable序列化标识接口

  首先介绍一下FILE文件操作类。

2. FILE文件操作类

  FILE类位于java.io包中,是五个核心类中唯一一个与文件本身操作(文件的删除,创建,取得信息…)有关的类。但是它并不能修改文件的内容(其它四个类用来修改文内容)。

2.1 FILE构造方法

  FILE有两个构造方法。

// 通过绝对路径创建FILE实例化
public File(String pathname)

// 通过父路径和子路径来创建FILE对象实例化
public File(String parent, String child)

  一般使用第一种构造方法,简洁明了。

File file = new File("E:\\IO\\demo.txt");

2.2 文件基本操作

  FILE作为文件的实例化对象时,FILE类提供如下几种基本操作方法:

// 文件是否存在
public boolean exists()

// 创建一个新的文件,FILE只是创建文件本身,并不进行文件内容的修改
public boolean createNewFile() throws IOException

// 删除一个文件
public boolean delete()

  看下面的例子:

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

/**
 * 测试路径:E:\IO
 */


public class Test {
    public static void main(String[] args) throws IOException {
        // 测试路径:E:\IO\demo.txt
        File file = new File("E:\\IO\\demo.txt");

        if(file.exists() && file.exists()) {// 文件如果存在,删除
            System.out.println("文件存在,删除...");
            file.delete();
        } else {// 文件不存在,创建
            System.out.println("文件不存在,创建...");
            file.createNewFile();
        }
    }
}

程序运行前,测试文件夹为空:

运行前


程序运行,程序运行结果:

运行结果


测试文件夹:

运行后


  Java为了突出跨平台性,在FILE中还引入了一个描述当前系统文件分隔符样式的常量。

  实际项目部署环境可能与开发环境不同。那么这个时候路径的问题就很麻烦了。windows下使用的
是”\”,而Unix系统下使用的是”/”。所以在使用路径分隔符时都会采用File类的一个常量。

public static final String separator = "" + separatorChar;

2.3 目录基本操作

  FILE不仅可以描述文件,也可以用来描述目录,描述目录时,有如下方法:

// 拿到当前FILE对象的父FILE(目录或文件)
public File getParentFile()

// 创建当前FILE的父目录
public boolean mkdirs()

  看下面的例子:

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

/**
 * 测试路径:E:\IO
 */


public class Test {
    public static void main(String[] args) throws IOException {
        // 测试路径:E:\IO
        File file = new File("E:\\IO\\a\\b");
        // 父路径不存在
        if(!file.getParentFile().exists()) {
            // 创建父路径
            file.getParentFile().mkdirs();
        }
    }
}

运行前测试文件夹为空:
运行前


运行后创建了多级目录:
运行后


  我们在创建FILE对象的父目录时绝对不能这样写:

// 这样写的话,会将file全部认为成路径
// 如果file: E:\IO\a\b\demo.txt。会将最后一级的 demo.txt 也识别成目录从而创建
// 而不是我们预期的 demo.txt 文件
file.mkdirs();

// 而先通过 getParentFile()拿到FILE对象父信息,就不会发生上述后果了
file.getParentFile().mkdirs();

2.4 取得文件信息

// 判断路径是否是文件
public boolean isFile()

// 判断路径是否是目录
public boolean isDirectory()

// 取得文件大小(字节)
public long length()

// 最后一次修改日期,这里返回的是一个时间戳
public long lastModified()

  看下面的例子:

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

/**
 * 测试路径:E:\IO
 */


public class Test {
    public static void main(String[] args) throws IOException {
        // 测试路径:E:\IO\demo.txt
        File file = new File("E:\\IO\\demo.txt");
        if(file.exists() && file.isFile()) {
            System.out.println("文件大小为:"+file.length());

            System.out.println("文件最后一次修改日期:"+file.lastModified());
            // lastModified()返回的是一个时间戳,我们可以使用 Date类将其转换为时间
            System.out.println(new Date(file.lastModified()));
        } else {
            file.createNewFile();
        }
    }
}

运行结果:

运行结果

  最后,我们来看一个厉害一点的方法。

// 获取当前目录子目录下所有的文件信息
public File[] listFiles()

  看个例子:

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

/**
 * 测试路径:E:\IO
 */


public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\IO");
        // 现在测试文件夹中创建一些文件
        for(int i = 0; i < 10; i++) {
            File tmpFile = new File("E:\\IO\\"+i);
            tmpFile.createNewFile();
        }
        System.out.println("创建测试文件完毕");

        // listFiels()只能获得目录信息,所以要确保当前为一个目录
        if(file.exists() && file.isDirectory()) {
            File[] files = file.listFiles();
            // 打印文件信息
            System.out.println("开始打印测试文件夹文件信息");
            for(File tmp : files) {
                System.out.println(tmp);
            }
        }
    }
}

运行结果:

运行结果


测试文件夹结果:

测试文件夹

关于FILE的综合演练可以参考

从你的U盘里夹点菜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值