输入和输出处理(字节)-1

文件概述

回顾数据存储方式 

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

  • 变量:单一数据存储方式
  • 数组:一组相同数据类型的数据
    • 数据类型:相同
    • 长度一经定义不可改变 
  • 对象:存储一组具有关联性的属性
  • 集合:可变数组、键值对存储,满足了我们各种各样的数据

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

  • 文件:是存储在某种长期存储设备上的一段数据流。
  • 所谓“长期存储设备”一般指:磁盘、光盘、磁带等。
  • 文件存储的特点:所存信息可以长期、多次使用,不会因为断电而消失。

 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 对象

 创建文件夹:

		File file1 = new File("d:/asd");
		file1.mkdir();

 常用方法:

  • exists():boolean 判断文件/文件夹是否存在
  • isFile():boolean 判断是否是文件
  • isDirectory():boolean 判断是否是文件夹
  • getName():String 获取文件/文件夹的名字
  • length():long 获取文件的大小(单位:字节)
  • createNewFile():boolean 创建文件
  • delete():boolean 删除文件/文件夹(只能删除空文件夹,且不进入回收站)
  • list():String[] 获取指定文件夹下的所有内容列表(文件/文件夹)
  • listFiles():File[] 获取指定文件夹下的所有内容的 File 对象列表(文件/文件夹)
  • listFiles(FileFilter fileFilter):File[] 根据文件过滤器来获取指定文件夹下的所有内容的 File 对象列表
    •  FileFilter fileFilter:文件过滤器,可以定义一个匿名内部类,或是创建一个实现类,重写 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 盘创建一个 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();
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值