输入和输出处理

文件概述

回顾数据存储方案

计算机内存中: 临时性的数据存储方案

  • 变量:单一数据存储方式

  • 数组:一组相同数据类型的数据

    • 数据类型:相同

    • 长度一经定义不可改变

  • 对象:存储一组具有关联性的数据

  • 集合:可变数组、键值对存储,满足了我们各种各样的数据存储要求

计算机硬盘中: “持久性” 的数据存储方案

  • 文件 :是存储在某种长期储存设备上的一段数据流。

  • 所谓 “长期储存设备” 一般指:磁盘、光盘、磁带等。

  • 文件存储的特点:所存信息可以长期、多次使用,不会因为断电而消失。

File类

java.io.File:是 Java 给我们提供的,用于操作文件/文件夹(目录)的 API。

构造方法:

  • File(String path) 通过文件/文件夹的路径来构建一个 File 对象

    注意:路径分隔符,在使用 \ 时,小心被 Java 识别为转义字符

    File file1 = new File("d:\\a.txt");
    File file2 = new File("d:/Develop");
  • File(String parent, String child) 通过文件/文件夹的父路径 + 子路径来构建一个 File 对象

  • File(File parent, String child) 通过文件/文件夹的父 File 对象 + 子路径来构建一个 File 对象

常用方法:

  • exists() : boolean 判断文件/文件夹是否存在

  • isFile() : boolean 判断是否是文件

  • isDirectory() : boolean 判断是否是文件夹

  • getName() : String 获取文件/文件夹的名字

  • length() : long 获取文件的大小(单位:字节)

  • createNewFile() : boolean 创建文件

  • delete() : boolean 删除文件/文件夹(只能删除空文件夹,且不进入回收站)

  • list() : String[] 获取指定文件夹下的所有内容列表(文件/文件夹)

  • listFiles() : File[] 获取指定文件夹下的所有内容的 File 对象列表(文件/文件夹)

  • listFiles(FileFilter fileFilter) : File[] 根据文件过滤器来获取指定文件夹下的所有内容的 File 对象列表

    文件过滤器,可以定义一个匿名内部类,或是创建一个实现类,重写 accept 方法。

    返回值,true:保留 false:舍弃

IO流概述

流: 水流(可以流动的水)、电流(可以流动的电)、车流(可以流动的车) ...

I:Input,输入

O:Output,输出

数据流: 可以流动的数据。

  • 根据流动的方向进行分类(流动的方向是根据程序来决定的)

    • 输入流:从数据源流动到程序(读取)

    • 输出流:从程序流动到目的地(写入)

  • 根据处理的单位进行分类

    • 字节流:处理单位是字节,byte

      • 字节流是最基础的一种处理单位

      • 通常用于一些文件复制、图片等处理(凡是用记事本直接打开的后不能看的)

    • 字符流:处理单位是字符,char

      • 字符流是基于字节流产生的

      • 通常用于一些文本文档等需要进行内容操作的处理(凡是用记事本直接打开还能看的)

  • 结合两种分类

    • 字节输入流

    • 字节输出流

    • 字符输入流

    • 字符输出流

字节流

字节输入流

java.io.InputStream

  • FileInputStream

构造方法:

  • FileInputStream(String name) 底层就是用第二种构造

  • FileInputStream(File file)

常用方法:

  • read() : int 读取一个字节的内容(读完了,返回 -1)

    int b = 0;
    while ((b = fis.read()) != -1) {
        System.out.print((char) b);
    }
  • read(byte[] buffer) : int 读取一个字节数组的内容,返回的不是读取到的内容,而是读取了多少个字节到字节数组中,返回 -1 表示读取完了。

  • close() : void 关流/释放资源(开启流之后,一定要关流!)

关流

在使用流相关的 API 时,使用完一定记得关流!为了保证流资源能够正确关闭,将关闭流的方法调用放在 finally 中。

FileInputStream fis = null;
try {
    // 指定数据源
    fis = new FileInputStream("d:/a.txt");
​
    // 读取数据
    byte[] buffer = new byte[6];
    fis.read(buffer);
    for (byte b : buffer) {
        System.out.print((char) b);
    }
} finally {
    // 关流
    if (fis != null) {
        fis.close();
    }
}

Java 7:try-with-resources。

try (FileInputStream fis = new FileInputStream("d:/a.txt")) {
    // 读取数据
    byte[] buffer = new byte[6];
    fis.read(buffer);
    for (byte b : buffer) {
        System.out.print((char) b);
    }
} catch (Exception e) {
    e.printStackTrace();
}

字节输出流

java.io.OutputStream

  • FileOutputStream

构造方法: 如果目的地文件不存在,它会自动创建

  • FileOutputStream(String name) 根据目的地路径,来构建一个输出流

  • FileOutputStream(String name, boolean append) 根据目的地路径,来构建一个输出流,append 代表是否是追加数据

    • append:false,代表不追加数据,而是覆盖

    • append:true,代表追加数据

  • FileOutputStream(File file)

  • FileOutputStream(File file, boolean append)

常用方法:

  • write(int b) : void 写入一个字节数据

  • write(byte[] b) : void 写入一个字节数组的数据

  • write(byte[] b, int off, int len) : void 写入一个字节数组指定范围的数据

    • off:起始索引

    • len:长度

  • close() : void 关流

文件的复制

需求:将 d 盘的 a.txt 复制到 e 盘。

  1. 在 e 盘创建1个 a.txt 文件(输出流会自动创建文件)

  2. 将 d 盘的 a.txt 文件的内容写入到 e 盘的 a.txt 中(输入流读取,输出流写入)

// 指定数据源和输出目的地(创建输入流和输出流)
try (FileInputStream fis = new FileInputStream("d:/a.txt");
     FileOutputStream fos = new FileOutputStream("e:/a.txt")) {
​
    // 边读边写
    // 读取d盘a.txt内容
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = fis.read(buffer)) != -1) {
        // 将读取到的内容写入e盘a.txt
        fos.write(buffer, 0, len);
    }
​
    System.out.println("复制成功!");
} catch (Exception e) {
    e.printStackTrace();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值