Java 之路 (二十) -- Java I/O 上(BIO、文件、数据流、如何选择I/O流、典型用例)

本文详细介绍了Java的I/O流概念,包括字节流与字符流的区别,File类和RandomAccessFile的使用,以及InputStream、OutputStream、Reader、Writer的基本操作。讲解了如何根据需求选择合适的I/O流,并提供了标准输入输出、文件读写等典型使用案例。
摘要由CSDN通过智能技术生成

前言

Java 的 I/O 类库使用 这个抽象概念,代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象。 屏蔽了实际的 I/O 设备中处理数据的细节。

数据流是一串连续不断的数据的集合,简单理解的话,我们可以把 Java 数据流当作是 管道里的水流。我们只从一端供水(输入流),而另一端出水(输出流)。对输入端而言,只关心如何写入数据,一次整体全部输入还是分段输入等;对于输出端而言,只关心如何读取数据,,无需关心输入端是如何写入的。

对于数据流,可以分为两类:

  1. 字节流:数据流中最小的数据单元是字节(二进制数据)
  2. 字符流:数据流中最小的数据单元是字符(Unicode 编码,一个字符占两个字节)

1. 概述

对于 Java.io 包内核心其实就是如下几个类:InputStream、OutputStream、Writer、Reader、File、(RandomAccessFile)。只要熟练掌握这几个类的使用,那么 io 部分就掌握的八九不离十了。

对于上面的几个类,又可以如下分类:

  1. 文件:File、RandomAccessFile
  2. 字节流:InputStream、OutputStream
  3. 字符流:Writer、Reader

io 包内还有一些其他的类,涉及安全以及过滤文件描述符等等,这里重点只在 io 的输入输出,有兴趣可以自行了解:https://docs.oracle.com/javase/9/docs/api/java/io/package-tree.html

简单介绍一下这几个类:

  1. File:用于描述文件或者目录信息,通常代表的是 文件路径 的含义。
  2. RandomAccessFile:随机访问文件
  3. InputStream:字节流写入,抽象基类。
  4. OutputStream:字节流输出,抽象基类。
  5. Reader:字符流输入,抽象基类
  6. Writer:字符流输出,抽象基类

2. 文件

2.1 File

File - 文件和目录路径名的抽象表示。它既可以指代文件,也可以代表一个目录下的一组文件。当指代文件集时,可以调用 list() 方法,返回一个字符数组,代表目录信息。

下面简单列举 File 的使用:

1. 读取目录

public class TestFile {
   
    public static void main(String[] args) {
        File path = new File("./src/com/whdalive/io");
        String[] list;
        list = path.list();

        for (String dirItem : list) {
            System.out.println(dirItem);
        }
    }
}

/**输出
TestFile.java
*/

2. 创建目录

public class TestFile {
   
    public static void main(String[] args) {
        File file = new File("D://test1/test2/test3");
        file.mkdirs();

        System.out.println(file.isDirectory());
    }
}

/**输出
true
*/

需要注意 mkdir() 和 mkdirs() 方法的区别

mkdir() 创建一个文件夹

mkdirs() 创建当前文件夹以及其所有父文件夹

3. 删除目录或文件

public class TestFile {
   
    public static void main(String[] args) {
        File file = new File("D://test1");
        deleteFolder(file);
    }
    private static void deleteFolder(File folder) {
        File[] files = folder.listFiles();
        if (files!=null) {
            for (File file : files) {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值